关于Java:Java——如何按顺序迭代map

java - how to iterate through maps in order

本问题已经有最佳答案,请猛点这里访问。

这是代码:

1
2
3
for(String key : mymap.stringPropertyNames()) {
//mycode
}

这是正确的,但我注意到我得到的值是随机的,有没有一种方法可以使用特定的顺序循环通过地图?

编辑:Mymapproperties对象。


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

如果希望对元素进行排序,则需要使用treemap,在这种情况下,键需要实现可比较的接口。


这是因为使用Map时没有像HashMap那样排序。

[...] This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

与此相反,您可以使用一些具体的实现,如:

TreeMap

The map is sorted according to the natural ordering of its keys or by a Comparator provided at map creation time, depending on which constructor is used.

如果你不需要副本…

Hash table and linked list implementation of the Map interface, with predictable iteration order.


或者将映射实现更改为支持排序的实现之一,或者在对键进行迭代之前对它们进行排序。不过,我有点困惑,通常情况下,人们通过keySet方法获得地图的键。我不熟悉stringPropertyNames,但如果它是一个地图,您应该能够做一些类似(未测试代码)的事情:

1
2
3
4
5
List keys = new ArrayList(mymap.keySet())
Collections.sort(keys)
for ( String key : keys ) {
    [...]
}