Java HashMap和底层值()集合

时间:2011-03-04 15:36:38

标签: java hashmap

我想知道当HashMap发生变化时,HashMap中包含的值的Collection视图是否保持有序。

例如,如果我有一个HashMap,其values()方法返回L = {a,b,c} 如果我在地图中添加一个新元素“d”,L会发生什么? 它是在最后添加的,即如果我遍历元素,它是保留的顺序吗?

特别是,如果添加新元素“d”导致重新散列,订单会保留在L?

非常感谢!

4 个答案:

答案 0 :(得分:5)

  

我想知道当HashMap发生变化时,HashMap中包含的值的Collection视图是否保持有序。

不,没有这样的保证。

如果是这种情况,那么以下程序将从1-100

输出和排序序列
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

for (int i = 0; i < 100; i++)
    map.put(i, i);

System.out.println(map.values());

and it doesn't)

有一个课程正是你所要求的,那就是LinkedHashMap

  

Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链接列表定义迭代排序,通常是键插入地图的顺序(插入顺序)。

答案 1 :(得分:1)

如果它没有在JavaDoc中说出来,那么就不能保证它。不同版本的Java可以做不同的事情。不要依赖无证件的行为。

您可能需要查看LinkedHashMap

答案 2 :(得分:0)

Java中的HashMap没有排序,所以我认为可以安全地说values()不会返回有序的Collection。

LinkedHashMap是HashMap的有序版本(插入顺序),但我不知道value()将返回有序的Collection。我认为最好是尝试。

答案 3 :(得分:0)

通常,当您使用HashMap时,它们无法保证顺序。它可能按照为少数元素添加元素的顺序,但是当有可能发生冲突时它会被重新调整,并且必须采用冲突解决策略。