Jawaban singkat
Gunakan a TreeMap. Ini tepatnya untuk apa.
Jika peta ini diteruskan kepada Anda dan Anda tidak dapat menentukan jenisnya, maka Anda dapat melakukan hal berikut:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Ini akan beralih di seluruh peta dalam urutan alami tombol.
Jawaban yang lebih panjang
Secara teknis, Anda dapat menggunakan apa pun yang mengimplementasikan SortedMap, tetapi kecuali untuk kasus yang jarang terjadi, ini TreeMapsama dengan menggunakan Mapimplementasi yang biasanya berarti HashMap.
Untuk kasus di mana kunci Anda adalah tipe kompleks yang tidak mengimplementasikan Sebanding atau Anda tidak ingin menggunakan tatanan alami itu TreeMapdan TreeSetmemiliki konstruktor tambahan yang memungkinkan Anda memasukkan dalam 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());
Ingat ketika menggunakan a TreeMapatau TreeSetitu akan memiliki karakteristik kinerja yang berbeda dari HashMapatau HashSet. Secara kasar operasi yang menemukan atau menyisipkan elemen akan beralih dari O (1) ke O (Log (N)) .
Dalam a HashMap, pindah dari 1000 item ke 10.000 tidak benar-benar mempengaruhi waktu Anda untuk mencari elemen, tetapi untuk TreeMapwaktu pencarian akan menjadi sekitar 3 kali lebih lambat (dengan asumsi Log 2 ). Pindah dari 1000 menjadi 100.000 akan menjadi sekitar 6 kali lebih lambat untuk setiap pencarian elemen.