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 Set
gyűjteményhez, de inkább "elempárokat" tárol, nem pedig elemek halmazát. Minden pár Map
ké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. HashMap
osztály
Az HashMap
osztá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 HashMap
egy ilyen utasítást:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Hol KeyType
van a tárolt párokban lévő kulcsok típusa, illetve ValueType
a gyűjteményben tárolt párokban lévő értékek típusa HashMap
.
Az HashMap
osztá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 HashMap
olyan tömböt vagy listát hoz létre, amelynek indexei String
szá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 HashMap
a 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
HashMap
a 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 map a 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 HashMap
gyű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 Set
osztá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 HashMap
erősen hasonlít egy olyan ArrayList
karakterláncra, amely lehetővé teszi karakterláncok (vagy más típusok) indexként való használatát (a kulcsokat).
Integer
Ha 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