1. Eine Reihe von Schlüssel-Wert-Paaren.
In Java ist eine weitere interessante Sammlung (im Großen und Ganzen) Map
. Manchmal wird diese Datenstruktur auch als Wörterbuch bezeichnet.
Es ähnelt der Set
Sammlung, speichert jedoch einen Satz von „Paaren“ von Elementen und nicht einen Satz von Elementen. Jedes Paar in a Map
besteht aus zwei Elementen: einem „Schlüssel“ und einem „Wert“.
Nehmen wir an, Sie möchten, dass Ihr Programm die Namen der Mitarbeiter und deren Gehälter oder die Namen Ihrer Kollegen und deren Alter speichert. Dann bräuchten Sie eine Tabelle wie diese:
Name | Alter |
---|---|
Elon | 21 |
Jeff | 22 |
Rechnung | 48 |
Labyrinth | ? |
Jede Zeile enthält einige Werte. Wir bezeichnen den Namen als Schlüssel des Paares und das Alter als Wert des Paares .
Die gesamte Menge dieser Paare ist unsere Karte ( Map
).
Der Schlüssel eines Paares kann alles außer sein null
. Schlüssel müssen eindeutig sein: Eine Karte darf nicht zwei identische Schlüssel enthalten.
2. HashMap
Klasse
Die HashMap
Klasse ist die beliebteste Art der Map
Sammlung. Einerseits ist es HashSet sehr ähnlich und verfügt über alle seine Methoden. Andererseits ist es wie eine Liste ( ArrayList
), die Wörter (oder alles andere) als Indizes verwenden kann.
Sie können HashMap
eine Anweisung wie diese erstellen:
HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();
Dabei KeyType
ist der Typ der Schlüssel in den gespeicherten Paaren und ValueType
der Typ der Werte in den in der HashMap
Sammlung gespeicherten Paaren.
Die HashMap
Klasse verfügt über Methoden wie diese:
Methode | Beschreibung |
---|---|
|
Fügt das ( key , value )-Paar zur Sammlung hinzu |
|
Gibt den mit einem Schlüssel verknüpften Wert zurück. |
|
Überprüft, ob ein Schlüssel in der Sammlung vorhanden ist |
|
Prüft, ob in der Sammlung ein Wert vorhanden ist |
|
Entfernt ein Element aus der Sammlung |
|
Löscht die Sammlung und entfernt alle Elemente |
|
Gibt die Anzahl der Schlüssel-Wert-Paare in der Sammlung zurück |
|
Gibt den Satz von Schlüsseln in der Sammlung zurück |
|
Gibt eine Menge zurück, die die Elemente der Sammlung enthält |
|
Gibt eine Menge ( Set ) aller Paare ( Map.Entry ) in der Sammlung zurück. |
Elemente zu a hinzufügenHashMap
Mit dieser Methode werden Elemente als Paare zu einer Karte hinzugefügt put()
. Als erstes Argument wird der Schlüssel und als zweites der Wert übergeben.
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);
Wenn beim Hinzufügen eines Schlüssel-Wert-Paares der Schlüssel bereits in der Sammlung vorhanden ist, wird der alte Wert durch den neuen Wert ersetzt.
Dieses Verhalten ähnelt HashMap
einem Array oder einer Liste, deren Indizes Wörter ( String
) anstelle von Zahlen sind.
Fast jeder Typ kann KeyType oder ValueType sein. Es gibt einige kleine zusätzliche Anforderungen für den KeyType, und Sie werden mehr darüber erfahren, wenn Sie sich in der Quest „Java-Sammlungen“ genauer mit Sammlungen befassen.
3. Teilmengen von a HashMap
: die Menge der Schlüssel
Nehmen wir an, wir möchten einfach alle Einträge in einem auf dem Bildschirm anzeigen HashMap
. Wie machen wir das? Dazu müssen wir wissen, wie wir alle Einträge im . durchgehen HashMap
. Dies kann auf verschiedene Arten erfolgen.
Am einfachsten ist es, die Tasten durchzuschleifen
HashMap
Einträge werden nicht fortlaufend nummeriert, daher funktioniert eine Schleife mit einem Zähler hier nicht. Aber wir können mit der Methode eine Reihe von Schlüsseln erhalten keySet()
, und Sie wissen bereits, wie man über eine Menge iteriert:
Code | Beschreibung |
---|---|
|
Durchlaufen Sie die Schlüssel des map Schlüssels. Rufen Sie den mit dem Schlüssel verknüpften Wert ab |
Die keySet()
Methode gibt einen Satz Schlüssel zurück. Sie können dieses Set auf zwei Arten verwenden:
Kompakte Notation | Lange Notation |
---|---|
|
|
4. Durchlaufen von Schlüssel-Wert-Paaren
Es gibt auch einen komplizierteren Weg: Sie können a Map
in eine Menge von Schlüssel-Wert-Paaren umwandeln und dann die Elemente der Menge durchlaufen, wie wir bereits gelernt haben.
Die HashMap
Sammlung verfügt über eine Hilfsklasse, die ein Schlüssel-Wert-Paar speichert. Es sieht ungefähr so aus:
class Entry<KeyType, ValueType>
{
private KeyType key;
private ValueType value;
public KeyType getKey()
{
return this.key;
}
public ValueType getValue()
{
return this.value;
}
}
Das Ergebnis des Aufrufs der entrySet()
Methode für ein Objekt ist :HashMap<KeyType, ValueType>
Set<Entry<KeyType, ValueType>>
Set<Entry<KeyType, ValueType>> name = map.entrySet();
Hier haben wir die generische Set
Klasse mit einem Typparameter, die wiederum ein generischer Typ ( Entry
) mit zwei Typparametern ist.
Als Anfänger kommt man hier sehr leicht in Verwirrung. Aber sobald Sie es herausgefunden haben, können Sie Code schreiben wie:
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);
}
Allerdings kann dieser Code ein wenig vereinfacht werden:
Erstens können Sie das Erstellen einer separaten Variablen für überspringen und stattdessen die Methode direkt in der Schleife entries
aufrufen :entrySet()
for
for(Map.Entry<String, Integer> pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Zweitens können Sie den kürzlich eingeführten var
Operator verwenden, um automatisch auf den Typ des Schlüssel-Wert-Paares zu schließen :
for(var pair: map.entrySet())
{
String key = pair.getKey();
Integer value = pair.getValue();
System.out.println(key + " --> " + value);
}
Nicht schlecht, oder?
5. Vergleich von ArrayList
undHashMap
A HashMap
ähnelt stark einem ArrayList
, das die Verwendung von Zeichenfolgen (oder anderen Typen) als Indizes (Schlüssel) ermöglicht.
Integer
Wenn Sie for die Tasten in a verwenden HashMap
, wird es einem noch ähnlicher ArrayList
. Lass uns vergleichen:
Code mit ArrayList<String> | Code mit HashMap<Integer, String> |
---|---|
|
|
GO TO FULL VERSION