首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Map.entrySet()如何遍历hashMap

Map.entrySet()如何遍历hashMap
EN

Stack Overflow用户
提问于 2013-01-25 09:42:21
回答 4查看 999关注 0票数 0

假设我定义并分配了一个HashMap(),如下所示:

代码语言:javascript
复制
private HashMap<Integer, Integer> rankCombinator=new HashMap<>();

在访问HashMap之前,我总是使用键和值来“构建”它,例如,我将15个整数存储在它上面作为键,以及我想要的相应值。我正在尝试使用for-each循环遍历此map:

代码语言:javascript
复制
for(Map.Entry<Integer, Integer> entry : rankCombinator.entrySet())
{
   // More code here.
}

我想这个循环不会返回按照最初输入的方式排序的值。我说的对吗?如果是,则返回值中是否存在任何模式?我试着查看了文档,但它似乎没有包含此模式。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-25 09:44:21

HashMap实现不能保证返回项目的顺序,我建议使用保留顺序的LinkedHashMap

代码语言:javascript
复制
private Map<Integer, Integer> rankCombinator=new LinkedHashMap<Integer, Integer>();

Api Documentation

票数 4
EN

Stack Overflow用户

发布于 2013-01-25 09:47:49

简而言之,不是。在javadoc中:“这个类不保证映射的顺序”

它是任意的,取决于哈希表中存储桶的数量,以及存储桶中元素的顺序。因此,当重新散列发生时,情况会有所不同。

如果需要基于插入顺序的可预测顺序,请使用LinkedHashMap

票数 1
EN

Stack Overflow用户

发布于 2013-01-25 09:48:10

散列映射根据键的散列码将项存储在“存储桶”中。当“普通”HashMap在其“散列存储桶”中找到条目时,它会返回条目。它没有可识别的模式,即使你找到了它,它也会严重依赖于实现并且不可靠。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14514005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档