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, Maptipik 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 TreeMapve aşağıdakileri TreeSetyapmanı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 TreeMapveya TreeSetbunun farklı performans özelliklerine sahip olacağını HashMapya 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 TreeMaparama 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.