我正在寻找一个实现,它会按键自动对其条目进行排序.我找到了TreeMap实现,这是正确的.但是,在我创建的测试中,我发现默认情况下HashMap,如果键是类型Integer,则条目按其键排序.我可以假设这样HashMap工作(并保持工作)并安全使用它,还是我应该TreeMap用于此目的?
不,您不能假设条目HashMap按其键排序,因为它们不是.
您可能使用小Integer键测试了少量条目,这些条目似乎是排序的,因为它hashCode的一个Integer是int值本身,因此键1转到bin 1,键2转到bin 2等等...当你迭代时在条目上,它们似乎按键排序,因为迭代顺序是根据索引的分类.
尝试大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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
2
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
此代码不会:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
400
800
100
500
900
200
600
300
700
Run Code Online (Sandbox Code Playgroud)