Kısa cevap
A kullanın TreeMap
. Bu tam olarak bunun için.
Bu harita size iletildiyse ve türü belirleyemiyorsanız, aşağıdakileri yapabilirsiniz:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Bu, harita boyunca anahtarların doğal sırasına göre yinelenir.
Daha uzun cevap
Teknik olarak, uygulayan her şeyi kullanabilirsiniz SortedMap
, ancak nadir durumlar dışında bu TreeMap
, Map
tipik olarak bir uygulamayı kullanmak gibi HashMap
.
Anahtarlarınızın Karşılaştırılabilir uygulamayan karmaşık bir tür olduğu veya doğal düzeni kullanmak istemediğiniz durumlarda TreeMap
ve aşağıdakileri TreeSet
yapmanıza izin veren ek kuruculara sahip olduğunuz durumlarda 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());
A kullanırken hatırla TreeMap
veya TreeSet
bunun farklı performans özelliklerine sahip olacağını HashMap
ya HashSet
. Bir öğeyi bulan veya ekleyen kabaca konuşan işlemler O (1) ' den O (Günlük (N))' e gider .
Bir de HashMap
, 10,000 1000 öğelerin hareket gerçekten bir elemanın arama için zaman etkilemez, ancak için TreeMap
arama süresi yaklaşık 3 kat daha yavaş (Log varsayarak olacaktır 2 ). 1000'den 100.000'e geçmek her öğe araması için yaklaşık 6 kat daha yavaş olacaktır.