【问题标题】:Add new Key to last index of HashMap instead of first index将新键添加到 HashMap 的最后一个索引而不是第一个索引
【发布时间】:2017-04-09 03:35:17
【问题描述】:

我有一个 HashMap,我正在迭代一个 List 来填充这个 HashMap:

List<ParseObject> objects // this has already objects;

final HashMap<String, ArrayList<ParseObject>> categoryTopics = new HashMap<>();
for (final ParseObject object : objects) {

    final String category = object.getParseObject("helpCategory").fetchIfNeeded().getString("name");
    if (categoryTopics.containsKey(category)) {
        final ArrayList<ParseObject> topics = categoryTopics.get(category);
        topics.add(object);
        categoryTopics.put(category, topics);
    } else {
        final ArrayList<ParseObject> topics = new ArrayList<>();
        topics.add(object);
        categoryTopics.put(category, topics);
    }
}

看起来和工作起来很简单:我遍历一个对象列表并尝试获取一个字符串。如果这个 String/Key 存在于 HashMap 中,我会更新值,如果没有,我会在 HashMap 中创建一个新条目。

列表包含 6 个对象。前 3 个具有字符串/密钥:“Health”,另外 3 个具有字符串/密钥:“Visa”。

当我迭代前 3 个对象(“Health”)时,HashMap 在索引 0(第一个键)中有一个键“Heatlh”,其中包含 3 个对象,但是当我选择第 4 个对象时,它有一个不同的键(“ Visa”),这个新的 Key 进入索引 0(第一个键),前一个 Key 进入索引 1(第二个键)。不应该反过来吗?

第二个键(“Visa”)应该转到索引 1,而不是替换索引 0 处的第一个键,对吗?我是否以错误的方式迭代和填充 HashMap,或者这是 HashMap 类的正确工作方式?

【问题讨论】:

  • HashMap 不保证条目的顺序。如果您需要定义的键/条目顺序,则需要改用 TreeMap。

标签: java android indexing hashmap


【解决方案1】:

HashMap 没有排序。如果您希望根据插入顺序对键进行排序,请使用LinkedHashMap。如果您希望它们按照其他顺序进行排序,请使用 TreeMap 和适当的 Comparator&lt;String&gt; 来定义顺序。

List<ParseObject> objects // this has already objects;

final Map<String, ArrayList<ParseObject>> categoryTopics = new LinkedHashMap<>();
for (final ParseObject object : objects) {

    final String category = object.getParseObject("helpCategory").fetchIfNeeded().getString("name");
    if (categoryTopics.containsKey(category)) {
        final ArrayList<ParseObject> topics = categoryTopics.get(category);
        topics.add(object);
        categoryTopics.put(category, topics);
    } else {
        final ArrayList<ParseObject> topics = new ArrayList<>();
        topics.add(object);
        categoryTopics.put(category, topics);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多