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 - 如何按顺序遍历地图[重复]的主要内容,如果未能解决你的问题,请参考以下文章