按设置顺序迭代HashMap

18

我已经按照特定的顺序设置了一个HashMap,但它以奇怪的顺序被迭代!

请考虑下面的代码:

HashMap<String, String> map = new HashMap<String, String>();
map.put("ID", "1");
map.put("Name", "the name");
map.put("Sort", "the sort");
map.put("Type", "the type");

...

for (String key : map.keySet()) {
    System.out.println(key + ": " + map.get(key));
}

以及结果:

Name: the name
Sort: the sort
Type: the type
ID: 1

我需要按照我放置条目的顺序进行迭代。

非常感谢任何帮助。


3
尝试使用LinkedHashMap:https://dev59.com/questions/kHRB5IYBdhLWcg3wN1EQ - Diego Pino
1
它以未定义的顺序进行迭代。请参阅Javadoc。如果您想要排序,请使用提供此功能的Map实现。 - user207421
2个回答

30

这就是 HashMap 内部的工作原理。将 HashMap 替换为LinkedHashMap,它还会额外记住插入的顺序:

Map<String, String> map = new LinkedHashMap<String, String>();

25

插入时的顺序取决于你插入的键值对所返回的hashCode()函数结果,这个结果通常是随机的(但是一致的)。你需要查找的是一个排序的映射表,例如LinkedHashMap

如果你对细节感兴趣,可以在这里了解一些关于哈希表如何工作的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接