我正在寻找一种实现,它会按键自动对其条目进行排序。我找到了TreeMap
实现,这是正确的。但是,在我创建的测试中,我发现HashMap
中的条目默认情况下,如果键的类型为Integer
,则按键排序。我可以假设HashMap
可以这样工作(并继续工作)并安全使用它,还是应该TreeMap
用于此目的?
答案 0 :(得分:7)
不,您不能假设HashMap
中的条目按其键排序,因为它们不是。
您可能使用小Integer
个键测试了少量条目,这些条目似乎已排序,因为hashCode
的{{1}}本身就是其int值,因此键1变为到bin 1,key 2转到bin 2等等...当你遍历条目时,它们似乎按键排序,因为迭代顺序是根据bin的索引。
尝试使用大Integer
个密钥,您会看到它们没有排序。
例如:
虽然此代码生成排序键:
Integer
输出:
HashMap<Integer,String> map = new HashMap<> ();
for (int i=0;i<10;i++) {
map.put (i, Integer.toString (i));
}
for (Integer key : map.keySet ()) {
System.out.println (key);
}
此代码不会:
0
1
2
3
4
5
6
7
8
9
输出:
HashMap<Integer,String> map = new HashMap<> ();
for (int i=0;i<10;i++) {
map.put (i*100, Integer.toString (i));
}
for (Integer key : map.keySet ()) {
System.out.println (key);
}