我在这里阅读有关 Hashmap 和 Hashtable 之间的区别: http://javarevisited.blogspot.sg/2010/10/difference- Between-hashmap-and.html
任何人都可以解释为什么它说以下吗?
“5.HashMap不保证map的顺序随着时间的推移保持不变。”
重新哈希时顺序是否会改变,这就是原因吗?
如果您能给我指出表现出不保证顺序保持不变的行为的资源或收藏列表,那就太好了。
AFIK,ArrayList 给出了这样的保证(如果我错了请告诉我)
编辑:“地图顺序”=可能是输入键或值的顺序。
A HashMap 在任何时候都没有顺序。它实际上并不用于此目的。即使不重新散列,顺序也可能会改变。 如果您需要顺序保持不变,请使用
LinkedHashMapMap <Integer, Object> map = new HashMap <Integer, Object> (4);
map.put (60, null);
map.put (48, null);
map.put (29, null);
System.out.println (map);
map.put (47, null);
map.put (15, null);
map.put (53, null);
map.remove (47);
map.remove (15);
map.remove (53);
System.out.println (map);
输出:
{29=null, 48=null, 60=null}
{48=null, 29=null, 60=null}
由于超出初始容量(此处为 4)时会发生重新哈希,因此顺序发生了变化。即使再次删除附加条目,也不会恢复原始顺序。
Map <String, Integer> map = new HashMap <> ();
map.put ("Apple", 250);
map.put ("Pear", 120);
map.put ("Papaya", 60);
System.out.println (map);
向映射添加条目时,每个键可能会生成(考虑到我们有一个良好的哈希函数)一个不同的整数。 假设 Apple 生成 4,Pear 生成 3,Papaya 生成 0。 因此,在内部,木瓜的索引为 0,泥炭的索引为 3,苹果的索引为 4。 因此,当您尝试打印 hashMap 中的值时,它的顺序将与插入的顺序不同。