假设我有HashMap()
定义并分配如下:
private HashMap<Integer, Integer> rankCombinator=new HashMap<>();
我总是在访问之前使用键和值“构建”HashMap,例如我将15个Integers存储为具有我想要的相应值的键。我试图使用for-each循环遍历此地图:
for(Map.Entry<Integer, Integer> entry : rankCombinator.entrySet())
{
// More code here.
}
我认为这个循环不会返回按照它们首先输入的方式排序的值。我对吗?如果是,返回的值中是否有任何模式? 我试过查看文档,但似乎它没有包含这种模式。
答案 0 :(得分:4)
HashMap
实施不保证退回商品的订单,我建议使用保留订单的LinkedHashMap
。
private Map<Integer, Integer> rankCombinator=new LinkedHashMap<Integer, Integer>();
答案 1 :(得分:1)
简短的回答,没有。来自javadoc:“此类不保证地图的顺序”
根据哈希表中的桶数以及桶中元素的顺序,它是任意的。因此,当重新发生时它会发生变化。
如果您需要基于广告订单的可预测订单,请使用LinkedHashMap。
答案 2 :(得分:1)
哈希映射根据密钥的哈希码将项目存储在“桶”中。 “plain”HashMap
返回条目,因为它在“hash bucket”中找到它们。没有可辨别的模式,即使你发现它,它也会严重依赖于实现并且不可靠。
如果您需要可靠的迭代顺序,请使用TreeMap
(您将获得按键排序的条目)或LinkedHashMap
(您将获得插入顺序)。请注意,TreeMap
具有决定其键相等性的不同机制,因此您可以使键具有可比性,或者在侧面提供比较器来处理键排序。
答案 3 :(得分:0)
顺序是随机的,但是由散列函数决定,散列函数将对象分配给散列图数组存储中的插槽。
有关此内容的更多信息:How does a hash table work?