简短的答案
使用TreeMap.这正是它的。
如果此地图传递给您,而您无法确定类型,则可以执行以下操作:
SortedSet 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 an anonymous class
Comparator comparator = new Comparator() {
public int compare(Foo o1, Foo o2) {
...
}
}
SortedSet keys = new TreeSet(comparator);
keys.addAll(map.keySet());
记住当使用TreeMap或TreeSet时,它将具有不同于HashMap或HashSet的性能特性。大致说来,查找或插入元素的操作将从O(1)到O(Log(N))。
在HashMap中,从1000项移动到10,000不会真正影响您查找元素的时间,但对于TreeMap,查找时间将减慢约3倍(假设Log2)。对于每个元素查找,从1000移动到100,000将是大约慢6倍。