我有一个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类正常工作的方式吗?
答案 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);
}
}