1. Kulcs-érték párok halmaza.

A Java nyelven egy másik érdekes gyűjtemény (nagyvonalakban véve) a Map. Néha ezt az adatstruktúrát szótárnak is nevezik.
Hasonló a Setgyűjteményhez, de inkább "elempárokat" tárol, nem pedig elemek halmazát. Minden pár Mapkét elemből áll: egy "kulcsból" és egy "értékből".
Tegyük fel, hogy azt szeretné, hogy a program tárolja az alkalmazottak nevét és fizetését, vagy a munkatársai nevét és életkorát. Akkor szükséged lesz egy ilyen táblázatra:
| Név | Kor |
|---|---|
| Elon | 21 |
| Jeff | 22 |
| Számla | 48 |
| Warren | ? |
Minden sor néhány értéket tartalmaz. A névre a pár kulcsaként hivatkozunk , az életkorra pedig a pár értékére .
E párok teljes halmaza a mi térképünk ( Map).
A pár kulcsa bármi lehet, kivéve null. A kulcsoknak egyedinek kell lenniük: egy térkép nem tartalmazhat két azonos kulcsot.
2. HashMaposztály
Az HashMaposztály a legnépszerűbb gyűjtemény Map. Egyrészt nagyon hasonlít a HashSet-hez, és minden metódusával rendelkezik. Másrészt olyan, mint egy lista ( ArrayList), amely szavakat (vagy bármi mást) használhat indexként.
Létrehozhat HashMapegy ilyen utasítást:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Hol KeyTypevan a tárolt párokban lévő kulcsok típusa, illetve ValueTypea gyűjteményben tárolt párokban lévő értékek típusa HashMap.
Az HashMaposztálynak vannak ilyen metódusai:
| Módszer | Leírás |
|---|---|
|
Hozzáadja a ( key, value) párt a gyűjteményhez |
|
A kulcshoz tartozó értéket adja vissza. |
|
Ellenőrzi, hogy van-e kulcs a gyűjteményben |
|
Ellenőrzi, hogy van-e érték a gyűjteményben |
|
Eltávolít egy elemet a gyűjteményből |
|
Törli a gyűjteményt, eltávolítja az összes elemet |
|
A gyűjteményben lévő kulcs-érték párok számát adja vissza |
|
Visszaadja a gyűjtemény kulcskészletét |
|
A gyűjtemény elemeit tartalmazó halmazt ad vissza |
|
A gyűjtemény Setösszes párjának ( ) halmazát ( ) adja eredményül .Map.Entry |
Elemek hozzáadása aHashMap
Az elemek a módszerrel párokba kerülnek a térképhez put(). A kulcsot első argumentumként, az értéket pedig másodikként adjuk át.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Kulcs-érték pár hozzáadásakor, ha a kulcs már létezik a gyűjteményben, akkor a régi érték helyére az új érték lép.
Ez a viselkedés HashMapolyan tömböt vagy listát hoz létre, amelynek indexei Stringszámok helyett szavak ( ).
Szinte bármilyen típus lehet KeyType vagy ValueType. Van néhány apró további követelmény a KeyType-hoz, és ezeket megtudhatja, ha részletesebben tanulmányozza a gyűjteményeket a Java Collections küldetésben.
3. A részhalmazai HashMap: a kulcsok halmaza
Tegyük fel, hogy csak az a betű összes bejegyzését szeretnénk megjeleníteni HashMapa képernyőn. Hogyan csináljuk ezt? Ehhez tudnunk kell, hogyan kell végigmenni az összes bejegyzésen a HashMap. Ezt többféleképpen is meg lehet tenni.
A legegyszerűbb módja a billentyűk áthurkolása
HashMapa bejegyzések nincsenek sorszámozva, így a számlálós hurok itt nem működik. De a metódus segítségével kaphatunk egy kulcskészletet keySet(), és már tudod, hogyan kell egy halmazon át iterálni:
| Kód | Leírás |
|---|---|
|
Hurkolja át a kulcsokat mapa Kulcshoz tartozó érték lekérése |
A keySet()metódus egy kulcskészletet ad vissza. Ezt a készletet kétféleképpen használhatja:
| Kompakt jelölés | Hosszú jelölés |
|---|---|
|
|
4. Kulcs-érték párok hurkolása
Van egy bonyolultabb módszer is: átalakíthatja a-t kulcs-érték párok halmazáváMap , majd a halmaz elemei között hurkolhatja, ahogy azt már megtanultuk.
A HashMapgyűjteménynek van egy segítő osztálya, amely kulcs-érték párt tárol. Körülbelül így néz ki:
class Entry<KeyType, ValueType>
{
private KeyType key;
private ValueType value;
public KeyType getKey()
{
return this.key;
}
public ValueType getValue()
{
return this.value;
}
}
entrySet()A metódus objektumon történő meghívásának eredménye a következő lesz :HashMap<KeyType, ValueType>Set<Entry<KeyType, ValueType>>
Set<Entry<KeyType, ValueType>> name = map.entrySet();
Itt van az általános Setosztály típusparaméterrel, ami viszont egy általános típus ( Entry), két típusparaméterrel.
Egy kezdő nagyon könnyen összezavarodik ezzel kapcsolatban. De ha rájöttél, írhatsz egy kódot, például:
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);
}
Ez a kód egy kicsit leegyszerűsíthető:
Először kihagyhatja egy külön változó létrehozását, entriesés ehelyett entrySet()közvetlenül a cikluson belül hívhatja meg a metódust for:
for(Map.Entry<String, Integer> pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Másodszor, a nemrég bevezetett operátor segítségével automatikusan kikövetkeztetheti a kulcs-érték párvar típusát :
for(var pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Nem rossz, mi?
5. Összehasonlítása ArrayListésHashMap
Az A HashMaperősen hasonlít egy olyan ArrayListkarakterláncra, amely lehetővé teszi karakterláncok (vagy más típusok) indexként való használatát (a kulcsokat).
IntegerHa a billentyűket használja HashMap, akkor még jobban hasonlít egy -re ArrayList. Hasonlítsuk össze:
| ArrayList<String> kóddal | Kód HashMap <Integer, String> segítségével |
|---|---|
|
|
GO TO FULL VERSION