我有一个 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 中创建一个新条目。
List包含6个对象。前 3 个具有字符串/键:“Health”,另外 3 个具有字符串/键:“Visa”。
当我迭代前 3 个对象(“Health”)时,HashMap 在索引 0(第一个键)中有一个键“Heatlh”,有 3 个对象,但是当我选择具有不同键(“Visa”)的第 4 个对象时),这个新的 Key 转到索引 0(第一个键),之前的 Key 转到索引 1(第二个键)。不应该是相反吗?
第二个密钥(“Visa”)应该转到索引 1,而不是替换索引 0 处的第一个密钥,对吧?我是否以错误的方式迭代和填充 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);
}
}