1. Satu set pasangan nilai kunci.
Di Jawa, satu lagi koleksi menarik (secara umum) ialah Map
. Kadangkala struktur data ini juga dipanggil kamus.
Ia serupa dengan Set
koleksi, tetapi ia menyimpan satu set "pasangan" elemen dan bukannya satu set elemen, Setiap pasangan dalam a Map
terdiri daripada dua elemen: "kunci" dan "nilai".
Katakan anda mahu program anda menyimpan nama pekerja dan gaji mereka, atau nama rakan sekerja anda dan umur mereka. Kemudian anda memerlukan jadual seperti ini:
Nama | Umur |
---|---|
Elon | 21 |
Jeff | 22 |
Bil | 48 |
Warren | ? |
Setiap baris mengandungi beberapa nilai. Kami akan merujuk nama sebagai kunci pasangan , dan umur sebagai nilai pasangan .
Seluruh set pasangan ini ialah peta kami ( Map
).
Kunci sepasang boleh menjadi apa-apa kecuali null
. Kekunci mestilah unik: satu peta tidak boleh mengandungi dua kekunci yang sama.
2. HashMap
kelas
Kelas HashMap
adalah jenis Map
koleksi yang paling popular. Di satu pihak, ia sangat serupa dengan HashSet dan mempunyai semua kaedahnya. Sebaliknya, ia seperti senarai ( ArrayList
) yang boleh menggunakan perkataan (atau apa-apa sahaja) sebagai indeksnya.
Anda boleh membuat HashMap
menggunakan pernyataan seperti ini:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Di manakah KeyType
jenis kunci dalam pasangan yang disimpan, dan ValueType
ialah jenis nilai dalam pasangan yang disimpan dalam HashMap
koleksi.
Kelas HashMap
mempunyai kaedah seperti ini:
Kaedah | Penerangan |
---|---|
|
Menambah pasangan ( key , value ) pada koleksi |
|
Mengembalikan nilai yang dikaitkan dengan kunci. |
|
Menyemak sama ada kunci wujud dalam koleksi |
|
Menyemak kewujudan nilai dalam koleksi |
|
Mengalih keluar elemen daripada koleksi |
|
Membersihkan koleksi, mengalih keluar semua elemen |
|
Mengembalikan bilangan pasangan nilai kunci dalam koleksi |
|
Mengembalikan set kunci dalam koleksi |
|
Mengembalikan set yang mengandungi elemen koleksi |
|
Mengembalikan set ( Set ) semua pasangan ( Map.Entry ) dalam koleksi. |
Menambah elemen pada aHashMap
Elemen ditambah pada peta sebagai pasangan menggunakan put()
kaedah. Kunci diluluskan sebagai hujah pertama, dan nilai diluluskan sebagai yang 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);
Apabila menambah pasangan nilai kunci, jika kunci sudah wujud dalam koleksi, maka nilai lama digantikan dengan nilai baharu.
Tingkah laku ini membuat HashMap
tatasusunan seperti atau senarai yang indeksnya ialah perkataan ( String
) dan bukannya nombor.
Hampir semua jenis boleh menjadi KeyType atau ValueType. Terdapat beberapa keperluan tambahan kecil untuk KeyType, dan anda akan mempelajari tentangnya apabila anda mengkaji koleksi dengan lebih terperinci dalam pencarian Java Collections.
3. Subset a HashMap
: set kekunci
Katakan kita hanya mahu memaparkan semua entri dalam a HashMap
pada skrin. Bagaimana kita melakukan ini? Untuk melakukan ini, kita perlu tahu bagaimana untuk melalui semua entri dalam HashMap
. Ini boleh dilakukan dalam beberapa cara.
Cara paling mudah ialah melingkari kekunci
HashMap
entri tidak dinomborkan secara berurutan, jadi gelung dengan pembilang tidak akan berfungsi di sini. Tetapi kita boleh mendapatkan satu set kunci menggunakan keySet()
kaedah itu, dan anda sudah tahu cara untuk mengulangi satu set:
Kod | Penerangan |
---|---|
|
Gelung pada kekunci map Dapatkan nilai yang dikaitkan dengan kunci |
Kaedah ini keySet()
mengembalikan satu set kunci. Anda boleh menggunakan set ini dalam dua cara:
Notasi padat | Notasi panjang |
---|---|
|
|
4. Menggulung pada pasangan nilai kunci
Terdapat juga cara yang lebih rumit: anda boleh mengubah a Map
menjadi set pasangan nilai kunci , dan kemudian gelungkan elemen set itu, seperti yang telah kita pelajari.
Koleksi ini HashMap
mempunyai kelas pembantu yang menyimpan pasangan nilai kunci. Ia kelihatan lebih kurang 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 daripada memanggil entrySet()
kaedah pada objek akan menjadi :HashMap<KeyType, ValueType>
Set<Entry<KeyType, ValueType>>
Set<Entry<KeyType, ValueType>> name = map.entrySet();
Di sini kita mempunyai Set
kelas generik dengan parameter jenis, yang seterusnya ialah jenis generik ( Entry
) dengan dua parameter jenis.
Sangat mudah bagi pemula untuk keliru tentang perkara ini. Tetapi sebaik sahaja anda memikirkannya, anda boleh menulis kod 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);
}
Yang berkata, kod ini boleh dipermudahkan sedikit:
Mula-mula, anda boleh melangkau membuat pembolehubah berasingan untuk entries
dan sebaliknya memanggil entrySet()
kaedah terus di dalam for
gelung:
for(Map.Entry<String, Integer> pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Kedua, anda boleh menggunakan var
operator yang diperkenalkan baru-baru ini untuk membuat kesimpulan secara automatik jenis pasangan nilai kunci :
for(var pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Tidak teruk, eh?
5. Perbandingan ArrayList
danHashMap
A HashMap
sangat menyerupai ArrayList
yang membolehkan rentetan (atau jenis lain) digunakan sebagai indeks (kunci).
Jika anda menggunakan Integer
untuk kekunci dalam HashMap
, maka ia menjadi lebih serupa dengan ArrayList
. Mari bandingkan:
Kod dengan ArrayList<String> | Kod dengan HashMap<Integer, String> |
---|---|
|
|
GO TO FULL VERSION