Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
Dan inilah cara mendapatkan nilai berdasarkan kunci:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Jika semua hal di atas sudah jelas, mari lanjutkan ke jawaban atas pertanyaan populer!
0. Cara mengulangi semua nilai Peta
Mengulangi nilai adalah operasi paling umum yang Anda lakukan dengan peta. Semua pasangan nilai kunci disimpan di antarmuka Map.Entry internal, dan untuk mendapatkannya Anda perlu memanggilentrySet()
. Ini mengembalikan satu Set pasangan yang dapat diulang:
for(Map.Entry<Integer, String> entry: map.entrySet()) {
// get key
Integer key = entry.getKey();
// get value
String value = entry.getValue();
}
Или используя итератор:
Iterator<Map.Entry<Integer, String>> itr = map.entrySet().iterator();
while(itr.hasNext()) {
Map.Entry<Integer, String> entry = itr.next();
// get key
Integer key = entry.getKey();
// get value
String value = entry.getValue();
}
1. Bagaimana mengkonversi Peta ke Daftar
Antarmuka Peta memiliki 3 metode yang mengembalikan daftar elemen:- keySet() - mengembalikan satu Set kunci;
- nilai() - mengembalikan Kumpulan nilai;
- entrySet() - mengembalikan Kumpulan kumpulan nilai kunci.
ArrayList
, Anda akan melihat bahwa ada konstruktor dengan argumen bertipe Collection. Karena Set adalah turunan dari Collection, hasil dari semua metode di atas dapat diteruskan ke konstruktor kelas ArrayList
. Jadi kita akan membuat daftar baru dan mengisinya dengan nilai dari Map
:
// key list
List<Integer> keyList = new ArrayList<>(map.keySet());
// value list
List<String> valueList = new ArrayList<>(map.values());
// key-value list
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet());
2. Cara mengurutkan kunci peta
Menyortir peta juga merupakan operasi yang cukup umum dalam pemrograman. Anda dapat melakukannya dengan beberapa cara:-
Masukkan Map.Entry ke dalam daftar dan urutkan menggunakan Comparator .
Di komparator kami hanya akan membandingkan kunci berpasangan:
List
> list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() { @Override public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) { return o1.getKey() - o2.getKey(); } }); Jika Anda memahami lambda, entri ini dapat dipersingkat secara signifikan:
Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
-
Gunakan
SortedMap
, atau lebih tepatnya, implementasinyaTreeMap
, yang menggunakan Komparator dalam konstruktornya. Komparator ini akan diterapkan pada kunci peta, sehingga kunci tersebut harus merupakan kelas yang mengimplementasikan antarmukaComparable
:SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } });
Dan, tentu saja, semuanya bisa ditulis ulang menggunakan lambda:
SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));
Berbeda dengan cara pertama, dengan SortedMap, kita akan selalu menyimpan data dalam bentuk terurut.
3. Cara mengurutkan nilai peta
Di sini Anda harus menggunakan pendekatan yang mirip dengan yang pertama untuk kunci - dapatkan daftar nilai dan urutkan dalam daftar:List <Map.Entry<Integer, String>> valuesList = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
@Override
public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Dan lambda untuk ini terlihat seperti ini:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
4. Apa perbedaan HashMap, TreeMap, dan Hashtable
Seperti disebutkan sebelumnya, ada 3 implementasi utama antarmuka Peta. Masing-masing mempunyai ciri khas tersendiri:-
Urutan elemen.
HashMap
danHashtable
tidak menjamin bahwa item akan disimpan sesuai urutan penambahannya. Selain itu, mereka tidak menjamin bahwa urutan elemen tidak akan berubah seiring waktu. Pada gilirannya,TreeMap
ini menjamin penyimpanan elemen dalam urutan penambahannya atau sesuai dengan pembanding yang diberikan. -
Nilai yang valid.
HashMap
memungkinkan Anda memiliki kunci dan nilai nol,HashTable
tidak. TreeMap hanya dapat menggunakan nilai null jika pembanding mengizinkannya. Tanpa menggunakan pembanding (dengan menyimpan pasangan sesuai urutan penambahannya), null tidak diperbolehkan. -
Sinkronisasi. Hanya
HashTable
tersinkronisasi, selebihnya tidak. Jika peta tidak dapat diakses oleh thread yang berbeda, disarankan untuk menggunakan HashMap daripada HashTable.
Peta Hash | Tabel Hash | Peta Pohon | |
---|---|---|---|
Urutan elemen | TIDAK | TIDAK | Ya |
nol sebagai nilai | Ya | TIDAK | Tidak terlalu |
Keamanan benang | TIDAK | Ya | TIDAK |
Kompleksitas algoritma dalam mencari elemen | HAI(1) | HAI(1) | HAI(log n) |
Struktur data di balik terpal | tabel hash | tabel hash | pohon merah-hitam |
5. Cara membuat peta dua arah
Terkadang perlu menggunakan struktur data yang kunci dan nilainya unik, yaitu peta akan berisi pasangan kunci-kunci. Struktur data ini memungkinkan Anda membuat “tampilan/penelusuran terbalik” pada peta. Artinya, kita dapat menemukan kunci berdasarkan nilainya.Struktur data ini disebut peta dua arah, yang sayangnya tidak didukung oleh JDK. Namun untungnya, implementasinya dapat ditemukan di Apache Common Collections atau perpustakaan Guava. Di sana masing-masing disebut BidiMap dan BiMap. Implementasi ini menerapkan pembatasan pada keunikan kunci dan nilai. Hal ini menciptakan hubungan satu lawan satu.6. Cara membuat Peta kosong
Ada dua cara untuk membuat peta kosong:-
Inisialisasi objek normal:
Map<Integer, String> emptyMap = new HashMap<>();
-
Membuat peta kosong yang tidak dapat diubah:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
pengecualian. Dalam artikel ini, kami melihat pertanyaan paling umum yang mungkin Anda miliki saat menggunakan antarmuka Peta.
Apa lagi yang harus dibaca: |
---|
GO TO FULL VERSION