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 Set
koleksi, tetapi menyimpan satu set "pasangan" elemen daripada satu set elemen, Setiap pasangan dalam a Map
terdiri 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. HashMap
kelas
Kelas HashMap
adalah jenis Map
koleksi 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 HashMap
menggunakan pernyataan seperti ini:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Di mana KeyType
tipe kunci dalam pasangan yang disimpan, dan ValueType
tipe nilai dalam pasangan yang disimpan dalam HashMap
koleksi.
Kelas HashMap
memiliki 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 HashMap
seperti 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 HashMap
layar. 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
HashMap
entri 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 map Dapatkan 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 Map
menjadi sekumpulan key-value pair , lalu mengulangi elemen himpunan, seperti yang telah kita pelajari.
Koleksi HashMap
memiliki 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 Set
kelas 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 entries
dan alih-alih memanggil entrySet()
metode langsung di dalam for
loop:
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 var
untuk 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 ArrayList
danHashMap
A HashMap
sangat menyerupai an ArrayList
yang memungkinkan string (atau jenis lainnya) untuk digunakan sebagai indeks (kunci).
Jika Anda menggunakan Integer
kunci 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