简短答案 使用TreeMap
。这正是它的目的。
如果将此地图传递给你,并且你无法确定类型,则可以执行以下操作:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
这将以键的自然顺序遍历整个地图。
更长的答案 从技术上讲,你可以使用任何实现的方法SortedMap
,但在极少数情况下等于TreeMap
,就像使用Map实现通常等于一样HashMap。
如果你的键是无法实现Comparable
的复杂类型,或者你不想使用自然顺序,然后TreeMap
又有TreeSet其他构造函数可以让你传递Comparator
:
// placed inline for the demonstration, but doesn't have to be a lambda expression
Comparator<Foo> comparator = (Foo o1, Foo o2) -> {
...
}
SortedSet<Foo> keys = new TreeSet<>(comparator);
keys.addAll(map.keySet());
请记住,当使用TreeMap或时TreeSet,它将具有与HashMap或不同的性能特征HashSet
。粗略地说,查找或插入元素的操作将从O(1)到O(Log(N))。
在中HashMap
,从1000项增加到10,000项并不会真正影响你查找元素的时间,但是对于一个元素,TreeMap
查找时间将慢3倍左右(假设Log 2)。对于每个元素查找,从1000迁移到100,000将慢6倍。