tl; dr
Untuk menjaga Map< Integer , String >agar urutan diurutkan berdasarkan kunci, gunakan salah satu dari dua kelas yang mengimplementasikan SortedMap/ NavigableMapinterface:
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 Mapimplementasi yang dibundel dengan Java 11.
The NavigableMapantarmuka adalah apa yang SortedMapseharusnya di tempat pertama. The SortedMaplogis 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/ NavigableMapinterface:
Kedua kunci ini disimpan dalam urutan yang diurutkan, baik berdasarkan urutan aslinya (menggunakan compareTometode Comparable( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) interface) atau dengan Comparatorimplementasi yang Anda lewati. Perbedaan antara dua kelas ini adalah bahwa yang kedua, ConcurrentSkipListMapadalah benang-aman , sangat bersamaan .
Lihat juga kolom Iteration order pada tabel di bawah ini.
- The
LinkedHashMapkelas mengembalikan entri yang oleh urutan di mana mereka awalnya dimasukkan .
EnumMapmengembalikan entri dalam urutan dimana kelas enum dari kunci didefinisikan . Misalnya, peta yang karyawannya mencakup hari mana dalam seminggu ( Map< DayOfWeek , Person >) menggunakan DayOfWeekkelas 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.
