将新键添加到HashMap的最后一个索引而不是第一个索引

时间:2016-11-24 18:56:35

标签: java android indexing hashmap

我有一个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。如果HashMap中存在此String / Key,则更新该值,否则,我在HashMap中创建一个新条目。

列表包含6个对象。前3个有字符串/键:&#34;健康&#34;,另外3个有字符串/键:&#34;签证&#34;。

当我迭代前3个对象时(&#34; Health&#34;),HashMap有一个键&#34; Heatlh&#34;在索引0(第一个键)中有3个对象,但当我去第4个对象时,它有一个不同的键(&#34; Visa&#34;),这个新键进入索引0(第一个键)和前一个键转到索引1(第二个键)。它不应该是相反的方式?

第二个密钥(&#34; Visa&#34;)应该转到索引1而不是替换索引0处的第一个密钥?我是否以错误的方式迭代和填充HashMap,或者这是HashMap类正常工作的方式吗?

1 个答案:

答案 0 :(得分:3)

HashMap没有订购。如果您希望根据广告订单订购密钥,请使用LinkedHashMap。如果您希望按照其他顺序对它们进行排序,请使用TreeMap和相应的Comparator<String>来定义排序。

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);
    }
}