【发布时间】: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