java - 如何按顺序遍历地图[重复]

Posted

技术标签:

【中文标题】java - 如何按顺序遍历地图[重复]【英文标题】:java - how to iterate through maps in order [duplicate] 【发布时间】:2016-10-16 05:48:43 【问题描述】:

这是代码:

for(String key : mymap.stringPropertyNames()) 
//mycode

这可以正常工作,但我注意到我以随机顺序获得所需的值,有没有办法使用特定顺序循环遍历地图?

编辑:Mymap 是一个 properties 对象。

【问题讨论】:

这取决于mymap 是什么。 @Ciurga,您使用的是哪张地图?您需要使用 TreeMap 来根据一些逻辑顺序存储和迭代内容 mymap 实际上是一个属性对象 您想要一个尊重元素最初插入顺序的Map,例如LinkedHashMap,还是想要一个按特定顺序对键进行排序的Map,比如TreeMap? 对。看起来你已经得到了答案。我可以建议您通过单击勾选标记将此处的答案之一标记为已接受吗?这样,每个人都知道您不需要更多信息。 【参考方案1】:

这是因为您使用的是 Map 而没有像 HashMap 那样进行排序

[...] 此类不保证地图的顺序; 特别是,它不保证顺序将保持不变随着时间的推移 .


除此之外,您可以使用一些具体的实现,例如:

TreeMap:

地图根据其键的自然顺序或地图创建时提供的比较器进行排序,具体取决于使用的构造函数。

LinkedHashMap 如果你需要没有重复...

Hash 表和Map 接口的链表实现,具有可预测的迭代顺序。

【讨论】:

好的,谢谢,我改一下代码 @Ciurga 如果您需要循环维护订单并且不需要按键访问它们,请考虑使用列表。 @Ciurga 因为这是您必须知道的第一个问题,如果此或任何答案已解决您的问题,请单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并且给回答者和您自己带来了一些声誉。没有义务这样做。【参考方案2】:

要么将 Map 实现更改为支持排序的实现之一,要么在迭代之前对键进行排序。不过我有点困惑,通常一个人通过keySet 方法获取地图的键。我对stringPropertyNames 不熟悉,但如果它是地图,您应该能够执行类似(未经测试的代码)之类的操作:

List keys = new ArrayList(mymap.keySet())
Collections.sort(keys)
for ( String key : keys ) 
    [...]

【讨论】:

【参考方案3】:

如果您想要可预测的迭代顺序(插入顺序),请使用LinkedHashMap

如果要对元素进行排序,则需要使用 TreeMap ,在这种情况下,键需要实现 Comparable 接口

【讨论】:

以上是关于java - 如何按顺序遍历地图[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中遍历JSONObject不能按原顺序遍历

按顺序收集值,每个值都包含一个映射

java 按顺序遍历Tree

关于java中HasMap的遍历输出不按顺序

关于java中HasMap的遍历输出不按顺序

java按字母顺序排序[重复]