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 TreeMap
sama dengan menggunakan Map
implementasi 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 TreeMap
dan TreeSet
memiliki 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 TreeMap
atau TreeSet
itu akan memiliki karakteristik kinerja yang berbeda dari HashMap
atau 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 TreeMap
waktu 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.