1. Satu set key-value pair.

Di Jawa, koleksi lain yang menarik (secara garis besar) adalah Map. Terkadang struktur data ini juga disebut kamus.
Ini mirip dengan Setkoleksi, tetapi menyimpan satu set "pasangan" elemen daripada satu set elemen, Setiap pasangan dalam a Mapterdiri dari dua elemen: "kunci" dan "nilai".
Katakanlah Anda ingin program Anda menyimpan nama karyawan dan gaji mereka, atau nama rekan kerja Anda dan usia mereka. Maka Anda akan membutuhkan tabel seperti ini:
| Nama | Usia |
|---|---|
| Elon | 21 |
| jef | 22 |
| Tagihan | 48 |
| Warren | ? |
Setiap baris berisi beberapa nilai. Kami akan merujuk nama sebagai kunci pasangan , dan usia sebagai nilai pasangan .
Seluruh rangkaian pasangan ini adalah peta kita ( Map).
Kunci pasangan bisa berupa apa saja kecuali null. Kunci harus unik: satu peta tidak boleh berisi dua kunci yang identik.
2. HashMapkelas
Kelas HashMapadalah jenis Mapkoleksi yang paling populer. Di satu sisi, ini sangat mirip dengan HashSet dan memiliki semua metodenya. Di sisi lain, ini seperti daftar ( ArrayList) yang dapat menggunakan kata (atau yang lainnya) sebagai indeksnya.
Anda dapat membuat HashMapmenggunakan pernyataan seperti ini:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Di mana KeyTypetipe kunci dalam pasangan yang disimpan, dan ValueTypetipe nilai dalam pasangan yang disimpan dalam HashMapkoleksi.
Kelas HashMapmemiliki metode seperti ini:
| metode | Keterangan |
|---|---|
|
Menambahkan pasangan ( key, value) ke koleksi |
|
Mengembalikan nilai yang terkait dengan kunci. |
|
Memeriksa apakah ada kunci dalam koleksi |
|
Memeriksa keberadaan nilai dalam koleksi |
|
Menghapus elemen dari koleksi |
|
Membersihkan koleksi, menghapus semua elemen |
|
Mengembalikan jumlah key-value pair dalam koleksi |
|
Mengembalikan set kunci dalam koleksi |
|
Mengembalikan set yang berisi elemen koleksi |
|
Mengembalikan satu set ( Set) dari semua pasangan ( Map.Entry) dalam koleksi. |
Menambahkan elemen ke aHashMap
Elemen ditambahkan ke peta sebagai pasangan menggunakan put()metode ini. Kunci diteruskan sebagai argumen pertama, dan nilainya diteruskan sebagai argumen kedua.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Saat menambahkan key-value pair, jika kunci sudah ada di koleksi, maka nilai lama akan diganti dengan nilai baru.
Perilaku ini membuat HashMapseperti array atau daftar yang indeksnya adalah kata ( String) bukan angka.
Hampir semua tipe bisa menjadi KeyType atau ValueType. Ada beberapa persyaratan tambahan kecil untuk KeyType, dan Anda akan mempelajarinya saat mempelajari koleksi secara lebih mendetail dalam pencarian Java Collections.
3. Subset dari a HashMap: himpunan kunci
Katakanlah kita hanya ingin menampilkan semua entri di HashMaplayar. Bagaimana kita melakukan ini? Untuk melakukan ini, kita perlu mengetahui bagaimana menelusuri semua entri dalam file HashMap. Hal ini dapat dilakukan dengan beberapa cara.
Cara termudah adalah dengan mengulang kunci
HashMapentri tidak diberi nomor secara berurutan, jadi loop dengan penghitung tidak akan berfungsi di sini. Tapi kita bisa mendapatkan satu set kunci menggunakan keySet()metode ini, dan Anda sudah tahu cara mengulang satu set:
| Kode | Keterangan |
|---|---|
|
Ulangi kunci mapDapatkan nilai yang terkait dengan kunci |
Metode keySet()mengembalikan satu set kunci. Anda dapat menggunakan set ini dengan dua cara:
| Notasi kompak | Notasi panjang |
|---|---|
|
|
4. Mengulang pasangan kunci-nilai
Ada juga cara yang lebih rumit: Anda bisa mengubah a Mapmenjadi sekumpulan key-value pair , lalu mengulangi elemen himpunan, seperti yang telah kita pelajari.
Koleksi HashMapmemiliki kelas pembantu yang menyimpan pasangan kunci-nilai. Tampilannya kira-kira seperti ini:
class Entry<KeyType, ValueType>
{
private KeyType key;
private ValueType value;
public KeyType getKey()
{
return this.key;
}
public ValueType getValue()
{
return this.value;
}
}
Hasil pemanggilan entrySet()metode pada objek akan menjadi :HashMap<KeyType, ValueType>Set<Entry<KeyType, ValueType>>
Set<Entry<KeyType, ValueType>> name = map.entrySet();
Di sini kita memiliki Setkelas generik dengan parameter tipe, yang pada gilirannya adalah tipe generik ( Entry) dengan dua parameter tipe.
Sangat mudah bagi pemula untuk bingung tentang hal ini. Tetapi begitu Anda mengetahuinya, Anda dapat menulis kode seperti:
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> pair: entries)
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Konon, kode ini bisa sedikit disederhanakan:
Pertama, Anda dapat melewati pembuatan variabel terpisah untuk entriesdan alih-alih memanggil entrySet()metode langsung di dalam forloop:
for(Map.Entry<String, Integer> pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Kedua, Anda dapat menggunakan operator yang baru diperkenalkan varuntuk secara otomatis menyimpulkan jenis pasangan nilai kunci :
for(var pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Tidak buruk, kan?
5. Perbandingan ArrayListdanHashMap
A HashMapsangat menyerupai an ArrayListyang memungkinkan string (atau jenis lainnya) untuk digunakan sebagai indeks (kunci).
Jika Anda menggunakan Integerkunci dalam a HashMap, maka itu menjadi lebih mirip dengan ArrayList. Mari kita bandingkan:
| Kode dengan ArrayList<String> | Kode dengan HashMap<Integer, String> |
|---|---|
|
|
GO TO FULL VERSION