如何使用自然的entrySet()顺序迭代HashMap?
我的地图包含按字母顺序排序的键。当我显示它时,我使用的是entrySet().iterator(),但我的结果不是按字母顺序排列的。 我如何才能按顺序获得结果?
My Map contains keys sorted in alphabetical order. When I display it, I'm using entrySet().iterator(), but my results are not in the alphabetical order.
How can I get my results in order?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
不,您的地图不按字母顺序保存元素。您可能会按该顺序使用
.put(..)
,但映射没有定义的迭代顺序。其他人建议使用
SortedSet
,但您也可以使用 <代码>LinkedHashMap。它保证迭代顺序:No, your map does not hold elements in alphabetical order. You may have
.put(..)
then in that order, but the map does not have a defined iteration order.Others suggest using
SortedSet
, but you can also useLinkedHashMap
. It guarantees iteration order:使用 TreeMap:
Use TreeMap:
对于 2020 年及以后发现此问题的任何人...
现在我们有了流,您可以执行以下操作:
For anyone finding this question in 2020 and beyond...
Now that we have streams, you can do something like this:
这是不正确的。
使用 http://download.oracle.com/javase/ 6/docs/api/java/util/SortedMap.html 或在迭代之前对键进行排序
This is not true.
Use http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html or sort your keys before iterate
由于
HashMap
使用散列将条目存储在底层容器中,因此无法保证任何特定的顺序。如果您希望HashMap
中的条目有序,您必须自己对它们进行排序。另一方面,
TreeMap
将维护某种顺序(您可以通过实现Comparable
接口自行决定),因此,如果您获取其条目集,它就会出现按字母顺序给你。String
已经实现了Comparable
,因此它们将按字母顺序返回给您。Since
HashMap
uses hashing to store the entries in an underlying container, you aren't guaranteed any specific order. If you want your entries from yourHashMap
ordered, you must sort them yourself.A
TreeMap
on the other hand will maintain some sort of order (you can dictate that yourself by implementing theComparable
interface), so if you get its entry set, it will come to you alphabetically.String
already implementsComparable
, so they will be returned to you in alphabetical order.您可以使用 ConcurrentSkipListMap 或 TreeMap。
You can use ConcurrentSkipListMap or TreeMap.