Jenis peta
Di Java, fungsi utama peta adalah menyimpan pasangan nilai kunci. Karena nilainya diperoleh berdasarkan kunci, kunci tidak diperbolehkan diulang. Ini terutama memiliki kategori berikut:
Hashmap:
Data penyimpanan peta yang paling umum digunakan sesuai dengan nilai kode hashcy, dan dapat secara langsung mendapatkan nilainya sesuai dengan kunci, dengan kecepatan akses yang sangat cepat. Saat melintasi, urutan akuisisi data sepenuhnya acak. HashMap hanya memungkinkan satu catatan menjadi nol; nilai beberapa catatan menjadi nol; HashMap tidak mendukung sinkronisasi utas, yaitu, beberapa utas dapat menulis hashmap kapan saja; Ini dapat menyebabkan ketidakkonsistenan dalam data. Jika sinkronisasi diperlukan, Anda dapat menggunakan metode koleksi yang disinkronkan untuk membuat hashmap disinkronkan, atau menggunakan concurrenthashmap. Hashtable mirip dengan hashmap. Itu mewarisi dari kelas kamus. Perbedaannya adalah tidak mengizinkan kunci atau nilai yang direkam menjadi kosong; Ini mendukung sinkronisasi utas, yaitu, hanya satu utas yang dapat menulis hashtable kapan saja, sehingga juga menyebabkan hashtable menjadi lebih lambat saat menulis.
LinkedHashMap
Urutan penyisipan catatan disimpan. Saat melintasi LinkedHashMap dengan Iterator, catatan yang diperoleh terlebih dahulu harus dimasukkan terlebih dahulu. Anda juga dapat menggunakan parameter selama konstruksi dan mengurutkannya sesuai dengan jumlah aplikasi. Ini akan lebih lambat dari hashmap saat melintasi, tetapi ada pengecualian. Ketika HashMap memiliki kapasitas besar dan data yang kurang aktual, itu mungkin lebih lambat dari LinkedHashMap, karena kecepatan traversal LinkedHashMap hanya terkait dengan data aktual dan tidak ada hubungannya dengan kapasitas, sementara kecepatan traversal HashMap terkait dengan kapasitasnya.
TreeMap
Menerapkan antarmuka SortMap, catatan yang disimpannya dapat diurutkan sesuai dengan kunci. Secara default, itu diurutkan dalam urutan menaik dari nilai -nilai kunci, atau juga dapat menentukan pembanding yang diurutkan. Ketika dilintasi dengan iterator, catatan yang diperoleh diurutkan.
Penyortiran kunci
Dari pengantar di atas ke jenis peta, kita dapat melihat bahwa TreeMap memiliki fungsi penyortiran kunci sendiri. Ini hanya perlu mengimplementasikan antarmuka perbandingan secara bersamaan saat membuatnya. Contohnya adalah sebagai berikut:
private static void sort_by_key () {peta <Integer, integer> treemap = new TreeMap <> (pembanding baru <Integer> () {@override public int bandar // Isi data untuk (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ()); value int = (int) (10000*math.random ()); treemap.put (kunci, nilai); } outmap (treemap); } public static void outmap (peta <Integer, integer> peta) {for (integer integer: peta.keyset ()) {system.out.println ("key ="+integer+"value ="+map.get (integer))); }}/* Hasilnya adalah sebagai berikut: KEY = 9977 Nilai = 80Key = 9684 Nilai = 7108Key = 9422 Nilai = 1706Key = 9264 Nilai = 1210Key = 9248 Nilai = 4758Key = 9024 Nilai = 7048Key = 8892 Nilai = 3124Key = 8879 Nilai = 8171Key = 8728 Nilai = 1538Key = 8513 Nilai = 4956Key = 8462 Nilai = 5617Key = 8355 Nilai = 8912*//Seperti yang dapat dilihat dari hal di atas, tidak sulit untuk mengurutkan berdasarkan kunci, tetapi lebih merepotkan untuk menempatkan jenisnya, jadi Anda perlu memutar peta.
Urutkan berdasarkan nilai
Karena peta tidak memiliki fungsi ini di Java, kita perlu menerapkannya sendiri. Idenya adalah sebagai berikut:
Daftar di Java dapat menggunakan antarmuka Bandingkan.
Peta sebenarnya adalah koleksi entri <>. Jadi menggunakan daftar <entri <>> dapat menerapkan penyortiran dan memasukkan elemen yang diurutkan ke LinkedMap.
Implementasi kode adalah sebagai berikut:
peta statis pribadi <Integer, Integer> sortmap (peta <integer, integer> linkedmap) {list <map.entry <integer, integer >> cache = new arraylist <> (linkedmap.entryset ()); //Rewrite the comparison function Collections.sort(cache,new Comparator<Map.Entry<Integer, Integer>>() { @Override public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) { //If the return value is less than 0, then o1 is before o2 return o2.getValue()-o1.getValue(); } }); Peta <Integer, Integer> resultMap = new LinkedHashMap <> (); // Masukkan hasilnya ke LinkedMap dan kembalikan untuk (int i = 0; i <cache.size (); i ++) {resultMap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } return resultMap; }/*Hasil: 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*//Dengan cara ini, baik penyortiran berdasarkan nilai dan penyortiran berdasarkan kunci dapat dicapai.