HashMap中键/值对的顺序

时间:2019-04-12 09:31:56

标签: java hashmap

如果两个哈希图具有一组完全相同的键值对,那么在两个哈希图上进行迭代时,我是否总是以相同的顺序获取数据?

Map<String, String> map1 = new HashMap<>();
Map<String, String> map2 = new HashMap<>();
map1.put("a1","b1");
map1.put("a2","b2");
map1.put("a3","b3");
map2.put("a1","b1");
map2.put("a2","b2");
map2.put("a3","b3");

for (Map.Entry<String,String> e : map1.entrySet()) {
    System.out.println(e.getKey());
}
for (Map.Entry<String,String> e : map2.entrySet()) {
    System.out.println(e.getKey());
}

如果map1的迭代看起来像(a1,a2,a3),map2的迭代也会像(a1,a2,a3)吗?

我知道存储区索引是使用键的哈希值计算的,但是我不确定是否总是返回相同的索引。

3 个答案:

答案 0 :(得分:5)

如果使用Hashmap,则永远不能依赖顺序。如果要维护插入顺序,请使用LinkedHashMap;对于排序顺序,请使用TreeMap

答案 1 :(得分:2)

Java文档清楚地指出,HashMap不保证地图的顺序。特别是it does not guarantee that the order will remain constant over time。因此,您应该考虑某些操作集可能会为您提供订单图。

答案 2 :(得分:-1)

键的顺序取决于要插入的键中hashCode()函数的结果。但是它们大多是随机且一致的。