1. Sakumpulan pasangan kunci-nilai.

Sakumpulan pasangan kunci-nilai

Ing Jawa, koleksi liyane sing menarik (sacara umum) yaiku Map. Kadhangkala struktur data iki uga disebut kamus.

Iku padha karo Setkoleksi, nanging nyimpen pesawat saka "pasangan" unsur tinimbang pesawat saka unsur, Saben pasangan ing kasusun Mapsaka rong unsur: "tombol" lan "nilai".

Contone, sampeyan pengin program sampeyan nyimpen jeneng karyawan lan gaji, utawa jeneng rekan kerja lan umur. Banjur sampeyan butuh tabel kaya iki:

jeneng Umur
Elon 21
Jeff 22
Bill 48
Warren ?

Saben baris ngemot saperangan nilai. Kita bakal nyebut jeneng minangka kunci pasangan , lan umur minangka nilai pasangan .

Kabeh pasangan pasangan iki minangka peta kita ( Map).

Kunci pasangan bisa apa wae kajaba null. Tombol kudu unik: siji peta ora bisa ngemot rong tombol sing padha.


2. HashMapkelas

Kelas HashMapminangka Mapkoleksi paling populer. Ing tangan siji, meh padha karo HashSet lan duwe kabeh cara. Ing sisih liya, kaya dhaptar ( ArrayList) sing bisa nggunakake tembung (utawa apa wae) minangka indeks.

Sampeyan bisa nggawe HashMapstatement nggunakake statement kaya iki:

HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();

Endi KeyTypejinis tombol ing pasangan sing disimpen, lan ValueTypeminangka jinis nilai ing pasangan sing disimpen ing HashMapkoleksi.

Kelas kasebut HashMapduwe metode kaya iki:

Metode Katrangan
void put(KeyType key, ValueType value)
Nambah pasangan ( key, value) menyang koleksi
ValueType get(KeyType key)
Ngasilake nilai sing ana gandhengane karo kunci.
boolean containsKey(KeyType key)
Priksa manawa ana kunci ing koleksi kasebut
boolean containsValue(ValueType value)
Priksa manawa ana nilai ing koleksi kasebut
ValueType remove(KeyType key)
Mbusak unsur saka koleksi
void clear()
Mbusak koleksi, mbusak kabeh unsur
int size()
Ngasilake nomer pasangan kunci-nilai ing koleksi
Set<KeyType> keySet()
Ngasilake set tombol ing koleksi
Collection<ValueType> values()
Ngasilake set sing ngemot unsur koleksi
Set<Map.Entry<KeyType, ValueType>> entrySet()
Ngasilake set ( Set) kabeh pasangan ( Map.Entry) ing koleksi.

Nambah unsur menyang aHashMap

Unsur ditambahake menyang peta minangka pasangan nggunakake put()metode kasebut. Tombol kasebut dilewati minangka argumen pisanan, lan nilai kasebut dilewati minangka nomer loro.

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);

Nalika nambahake pasangan kunci-nilai, yen kunci wis ana ing koleksi, banjur nilai lawas diganti karo nilai anyar.

Prilaku iki ndadekake HashMapkaya array utawa dhaptar sing indeks minangka tembung ( String) tinimbang angka.

penting:

Meh kabeh jinis bisa dadi KeyType utawa ValueType. Ana sawetara syarat tambahan cilik kanggo KeyType, lan sampeyan bakal sinau babagan nalika sinau koleksi luwih rinci ing nggoleki Java Collections.



3. Subset a HashMap: kumpulan tombol

Kita mung pengin nampilake kabeh entri ing a HashMaping layar. Kepiye carane nindakake iki? Kanggo nindakake iki, kita kudu ngerti carane mbukak kabeh entri ing HashMap. Iki bisa ditindakake kanthi pirang-pirang cara.

Cara sing paling gampang yaiku ngubengi tombol

HashMapentri ora diwenehi nomer urut, supaya daur ulang karo counter ora bisa ing kene. Nanging kita bisa entuk set kunci kanthi nggunakake keySet()metode kasebut, lan sampeyan wis ngerti carane ngulang set:

Kode Katrangan
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);

for (String key: map.keySet())
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}






Loop liwat tombol saka map

Entuk nilai sing digandhengake karo tombol

Cara kasebut keySet()ngasilake set tombol. Sampeyan bisa nggunakake set iki kanthi rong cara:

Notasi kompak Notasi dawa
for (String key: map.keySet())
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}
Set<String> keys = map.keySet();

for (String key: keys)
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}


4. Looping liwat pasangan kunci-nilai

Ana uga cara sing luwih rumit: sampeyan bisa ngowahi a Mapdadi set pasangan kunci-nilai , banjur ngubengi unsur-unsur set kasebut, kaya sing wis kita sinau.

Koleksi kasebut HashMapnduweni kelas pembantu sing nyimpen pasangan kunci-nilai. Iku katon kira-kira kaya iki:

class Entry<KeyType, ValueType>
{
   private KeyType key;
   private ValueType value;

   public KeyType getKey()
   {
      return this.key;
   }

   public ValueType getValue()
   {
      return this.value;
   }
}

Asil nelpon entrySet()metode ing obyek bakal dadi :HashMap<KeyType, ValueType>Set<Entry<KeyType, ValueType>>

Set<Entry<KeyType, ValueType>> name = map.entrySet();

Ing kene kita duwe Setkelas umum kanthi parameter jinis, sing dadi jinis umum ( Entry) kanthi rong parameter jinis.

Gampang banget kanggo pamula bingung babagan iki. Nanging yen sampeyan ngerti, sampeyan bisa nulis kode kaya:

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);
}

Sing jarene, kode iki bisa disederhanakake:

Pisanan, sampeyan bisa nglumpati nggawe variabel sing kapisah entrieslan mung nelpon entrySet()metode kasebut langsung ing fordaur ulang:

for(Map.Entry<String, Integer> pair: map.entrySet())
{
   String key = pair.getKey();
   Integer value = pair.getValue();
   System.out.println(key + " --> " + value);
}

Kapindho, sampeyan bisa nggunakake operator sing mentas dienalake varkanggo nemtokake jinis pasangan nilai kunci kanthi otomatis :

for(var pair: map.entrySet())
{
   String key = pair.getKey();
   Integer value = pair.getValue();
   System.out.println(key + " --> " + value);
}

Ora ala, ta?



5. Comparison saka ArrayListlanHashMap

A HashMapbanget meh podo karo ArrayListsing ngidini strings (utawa jinis liyane) digunakake minangka indeks (tombol).

Yen sampeyan nggunakake Integertombol ing HashMap, banjur dadi luwih padha karo ArrayList. Ayo mbandhingake:

Kode karo ArrayList<String> Kode nganggo HashMap<Integer, String>
ArrayList<String> list = new ArrayList<String>();

list.add("Greetings");
list.add("Hello");

String s = list.get(0);
list.set(0, s + "!");

for (String item: list)
{
   System.out.println(item);
}
HashMap<Integer, String> map = new HashMap<Integer, String>();

map.put(0, "Greetings");
map.put(1, "Hello");

String s = map.get(0);
map.put(0, s + "!");

for (String item: map.values())
{
   System.out.println(item);
}