Java HashMap和底层值()集合

jav*_*ert 3 java hashmap

我想知道当HashMap更改时,HashMap中包含的值的Collection视图是否保持有序.

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

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

非常感谢!

aio*_*obe 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());
Run Code Online (Sandbox Code Playgroud)

(它没有).

有一个类可以完全满足您的要求,即LinkedHashMap:

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