我想知道当HashMap发生变化时,HashMap中包含的值的Collection视图是否保持有序。
例如,如果我有一个HashMap,其values()方法返回L = {a,b,c} 如果我在地图中添加一个新元素“d”,L会发生什么? 它是在最后添加的,即如果我遍历元素,它是保留的顺序吗?
特别是,如果添加新元素“d”导致重新散列,订单会保留在L?
非常感谢!
答案 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());
有一个课程正是你所要求的,那就是LinkedHashMap
:
Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。 此链接列表定义迭代排序,通常是键插入地图的顺序(插入顺序)。
答案 1 :(得分:1)
如果它没有在JavaDoc中说出来,那么就不能保证它。不同版本的Java可以做不同的事情。不要依赖无证件的行为。
您可能需要查看LinkedHashMap。
答案 2 :(得分:0)
Java中的HashMap没有排序,所以我认为可以安全地说values()不会返回有序的Collection。
LinkedHashMap是HashMap的有序版本(插入顺序),但我不知道value()将返回有序的Collection。我认为最好是尝试。
答案 3 :(得分:0)
通常,当您使用HashMap时,它们无法保证顺序。它可能按照为少数元素添加元素的顺序,但是当有可能发生冲突时它会被重新调整,并且必须采用冲突解决策略。