Map.entrySet()如何遍历hashMap

时间:2013-01-25 01:42:21

标签: java foreach hashmap traversal

假设我有HashMap()定义并分配如下:

private HashMap<Integer, Integer> rankCombinator=new HashMap<>();

我总是在访问之前使用键和值“构建”HashMap,例如我将15个Integers存储为具有我想要的相应值的键。我试图使用for-each循环遍历此地图:

for(Map.Entry<Integer, Integer> entry : rankCombinator.entrySet())
{
   // More code here.
}

我认为这个循环不会返回按照它们首先输入的方式排序的值。我对吗?如果是,返回的值中是否有任何模式? 我试过查看文档,但似乎它没有包含这种模式。

4 个答案:

答案 0 :(得分:4)

HashMap实施不保证退回商品的订单,我建议使用保留订单的LinkedHashMap

private Map<Integer, Integer> rankCombinator=new LinkedHashMap<Integer, Integer>();

Api Documentation

答案 1 :(得分:1)

简短的回答,没有。来自javadoc:“此类不保证地图的顺序”

根据哈希表中的桶数以及桶中元素的顺序,它是任意的。因此,当重新发生时它会发生变化。

如果您需要基于广告订单的可预测订单,请使用LinkedHashMap

答案 2 :(得分:1)

哈希映射根据密钥的哈希码将项目存储在“桶”中。 “plain”HashMap返回条目,因为它在“hash bucket”中找到它们。没有可辨别的模式,即使你发现它,它也会严重依赖于实现并且不可靠。

如果您需要可靠的迭代顺序,请使用TreeMap(您将获得按键排序的条目)或LinkedHashMap(您将获得插入顺序)。请注意,TreeMap具有决定其键相等性的不同机制,因此您可以使键具有可比性,或者在侧面提供比较器来处理键排序。

答案 3 :(得分:0)

顺序是随机的,但是由散列函数决定,散列函数将对象分配给散列图数组存储中的插槽。

有关此内容的更多信息:How does a hash table work?