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

标签 java android indexing hashmap

我有一个 HashMap,我正在迭代一个列表来填充此 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);
    }
}

它看起来和工作起来都很简单:我迭代一个对象列表并尝试获取一个字符串。如果此字符串/键存在于 HashMap 中,我会更新该值,如果没有,我会在 HashMap 中创建一个新条目。

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

当我迭代前 3 个对象(“Health”)时,HashMap 在索引 0(第一个键)中有一个键“Heatlh”,其中有 3 个对象,但是当我查找第 4 个对象时,它有一个不同的键(“Visa”),这个新 key 将转到索引 0(第一个 key ),而先前的 key 将转到索引 1(第二个 key )。不应该是相反吗?

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

最佳答案

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

关于java - 将新的 Key 添加到 HashMap 的最后一个索引而不是第一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793041/

相关文章:

android - list 合并在 android studio 中失败

elasticsearch - ElasticSearch只能添加字段索引,而不能像lucene Field.Store.NO一样保存原始值

sql - 非主键列上的聚集索引还是非聚集索引?

java - 尝试获取 ViewGroup 的 Floating-EditText 子级

java - default case 必须包含在 Java 的 switch 语句中吗

java - 使用 NavigationComponent 在另一个 DialogFragment 的 navBackStackEntry 观察者结果中显示 DialogFragment

architecture - 如何使用动态数据启用页面索引?

java - Dagger 2 范围和子组件

java - 将文件中的单词存储到字符串 Java

android - 使用 LocationClient 定期获取更新的最省电的方法是什么?