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.
Mengasumsikan TreeMap tidak baik untuk Anda (dan dengan asumsi Anda tidak dapat menggunakan obat generik):
sumber
Menggunakan
TreeMap
Anda dapat mengurutkan peta.sumber
Gunakan TreeMap !
sumber
Jika Anda sudah memiliki peta dan ingin mengurutkannya pada tombol, cukup gunakan:
Contoh kerja lengkap:
sumber
Cukup gunakan TreeMap
Ketahuilah bahwa TreeMap disortir berdasarkan urutan alami 'kuncinya'
sumber
Asalkan Anda tidak dapat menggunakan
TreeMap
, di Java 8 kami dapat menggunakan metode toMap ()Collectors
yang mengambil parameter berikut:Contoh Java 8
Kita dapat memodifikasi contoh untuk menggunakan komparator khusus dan mengurutkan berdasarkan kunci sebagai:
sumber
Menggunakan Java 8:
sumber
Kode ini dapat mengurutkan peta nilai kunci di kedua pesanan yaitu naik dan turun.
Sebagai contoh:
sumber
Di Jawa 8
Untuk mengurutkan
Map<K, V>
berdasarkan kunci, masukkan kunci keList<K>
:Untuk mengurutkan
Map<K, V>
berdasarkan kunci, masukkan entri keList<Map.Entry<K, V>>
:Last but not least: untuk mengurutkan string dengan cara yang peka terhadap lokal - gunakan kelas Collator (pembanding):
sumber
sumber
Di Java 8 Anda juga dapat menggunakan .stream (). Diurutkan ():
sumber
Kita juga bisa mengurutkan kunci dengan menggunakan metode Arrays.sort.
sumber
Kalau-kalau Anda tidak ingin menggunakan
TreeMap
Juga, dalam kasus Anda ingin menyortir peta Anda atas dasar
values
perubahan hanyaMap.Entry::getKey
untukMap.Entry::getValue
sumber