tl; dr
Untuk menjaga Map< Integer , String >
agar urutan diurutkan berdasarkan kunci, gunakan salah satu dari dua kelas yang mengimplementasikan SortedMap
/ NavigableMap
interface:
TreeMap
ConcurrentSkipListMap
Jika memanipulasi peta dalam utas tunggal, gunakan yang pertama TreeMap
,. Jika memanipulasi seluruh utas, gunakan yang kedua ConcurrentSkipListMap
,.
Untuk detailnya, lihat tabel di bawah dan diskusi berikut.
Detail
Berikut ini adalah tabel grafik yang saya buat menunjukkan fitur dari sepuluh Map
implementasi yang dibundel dengan Java 11.
The NavigableMap
antarmuka adalah apa yang SortedMap
seharusnya di tempat pertama. The SortedMap
logis harus dihapus tetapi tidak bisa karena beberapa implementasi peta pihak ke-3 mungkin menggunakan antarmuka.
Seperti yang Anda lihat dalam tabel ini, hanya dua kelas yang mengimplementasikan SortedMap
/ NavigableMap
interface:
Kedua kunci ini disimpan dalam urutan yang diurutkan, baik berdasarkan urutan aslinya (menggunakan compareTo
metode Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) interface) atau dengan Comparator
implementasi yang Anda lewati. Perbedaan antara dua kelas ini adalah bahwa yang kedua, ConcurrentSkipListMap
adalah benang-aman , sangat bersamaan .
Lihat juga kolom Iteration order pada tabel di bawah ini.
- The
LinkedHashMap
kelas mengembalikan entri yang oleh urutan di mana mereka awalnya dimasukkan .
EnumMap
mengembalikan entri dalam urutan dimana kelas enum dari kunci didefinisikan . Misalnya, peta yang karyawannya mencakup hari mana dalam seminggu ( Map< DayOfWeek , Person >
) menggunakan DayOfWeek
kelas enum yang dibangun di Jawa. Enum itu didefinisikan dengan Senin pertama dan Minggu lalu. Jadi entri dalam iterator akan muncul dalam urutan itu.
Enam implementasi lainnya tidak membuat janji tentang urutan di mana mereka melaporkan entri mereka.