[Java-Grundlagen] Vertiefendes Verständnis von Java HashMap: Vorsichtsmaßnahmen bei der Verwendung und Leistungsoptimierung

Fügen Sie hier eine Bildbeschreibung ein

Java ist eine weit verbreitete Programmiersprache und Sammlungen sind ein integraler Bestandteil der Java-Programmierung. Im Sammlungsframework von Java ist HashMap eine häufig verwendete Datenstruktur zum Speichern von Schlüssel-Wert-Paaren. In diesem Artikel wird die HashMap-Sammlung ausführlich vorgestellt, von der einfachen bis zur erweiterten Verwendung, damit Sie sie besser verstehen und nutzen können.

Was ist HashMap?

HashMap ist eine Klasse im Java Collection Framework, die Mapeine Schnittstelle implementiert und zum Speichern von Schlüssel-Wert-Paaren verwendet wird. HashMap ermöglicht das Speichern von Nullschlüsseln und Nullwerten und bietet eine durchschnittliche Zeitkomplexität von O(1), um Schlüssel-Wert-Paare abzurufen und einzufügen. HashMap ist eine auf Hash-Tabellen basierende Datenstruktur. Sie speichert und ruft Daten über Hashing-Algorithmen ab und ist daher sehr effizient in der Suchgeschwindigkeit.

Grundlegende Verwendung von HashMap

Erstellen Sie ein HashMap-Objekt

Um ein HashMap-Objekt zu erstellen, können Sie die folgende Methode verwenden:

import java.util.HashMap;
import java.util.Map;

public class Main {
    
    
    public static void main(String[] args) {
    
    
        // 创建一个HashMap对象
        Map<String, Integer> hashMap = new HashMap<>();
    }
}

Fügen Sie Schlüssel-Wert-Paare hinzu

Sie können putMethoden verwenden, um Schlüssel-Wert-Paare zu einer HashMap hinzuzufügen:

hashMap.put("apple", 1);
hashMap.put("banana", 2);
hashMap.put("cherry", 3);

Wert erhalten

Um einen Wert aus einer HashMap zu erhalten, können Sie getdie Methode verwenden und den Schlüssel übergeben:

int value = hashMap.get("banana"); // 获取键"banana"对应的值,此时value为2

Schlüssel-Wert-Paar löschen

Um Schlüssel-Wert-Paare in einer HashMap zu löschen, können Sie removedie Methode verwenden:

hashMap.remove("apple"); // 删除键"apple"对应的键值对

HashMap durchqueren

Zum Durchlaufen einer HashMap können verschiedene Methoden verwendet werden. Die gebräuchlichste ist die Verwendung von forEach:

hashMap.forEach((key, value) -> {
    
    
    System.out.println(key + ": " + value);
});

Erweiterte Verwendung von HashMap

Behandeln Sie Kollisionen

Wenn HashMap Hash-Kollisionen verarbeitet (d. h. zwei verschiedene Schlüssel werden demselben Hash-Bucket zugeordnet), verwendet HashMap verknüpfte Listen und rot-schwarze Baumstrukturen zum Speichern von Schlüssel-Wert-Paaren. Dadurch kann HashMap in den meisten Fällen O(1)-Leistung bereitstellen.

Kapazität und Auslastungsfaktor

HashMap hat zwei wichtige Parameter, nämlich Kapazität und Auslastungsfaktor. Die Kapazität ist die Anzahl der Buckets in der Hash-Tabelle, während der Auslastungsfaktor angibt, wie voll die Buckets sind. Wenn die Anzahl der Elemente in einer HashMap das Produkt aus Kapazität und Auslastungsfaktor übersteigt, wird die Hash-Tabelle erweitert, um die Leistung aufrechtzuerhalten.

Map<String, Integer> hashMap = new HashMap<>(16, 0.75f);

Durchlaufen Sie eine Sammlung von Schlüsseln oder Werten

Zusätzlich zur Verwendung forEachvon Methoden zum Durchlaufen von Schlüssel-Wert-Paaren können Sie auch keySetdie valuesMethoden und verwenden, um eine Sammlung von Schlüsseln bzw. eine Sammlung von Werten abzurufen und diese zu durchlaufen:

Set<String> keys = hashMap.keySet(); // 获取所有键的集合
Collection<Integer> values = hashMap.values(); // 获取所有值的集合

for (String key : keys) {
    
    
    System.out.println(key);
}

for (int value : values) {
    
    
    System.out.println(value);
}

Standardwert überschreiben

Beim Abrufen eines Werts aus einer HashMap wird dieser normalerweise zurückgegeben, wenn der Schlüssel nicht vorhanden ist null. Wenn Sie einen Standardwert zurückgeben möchten, wenn der Schlüssel nicht existiert, können Sie getOrDefaultdie Methode verwenden:

int value = hashMap.getOrDefault("orange", 0); // 如果键"orange"不存在,返回默认值0

Zusammenführungsvorgang

Mit der Methode können Sie mergezwei HashMap zusammenführen:

Map<String, Integer> anotherMap = new HashMap<>();
anotherMap.put("apple", 5);
anotherMap.put("banana", 6);

anotherMap.forEach((key, value) -> {
    
    
    hashMap.merge(key, value, (oldValue, newValue) -> oldValue + newValue);
});

Dadurch werden die beiden HashMap zusammengeführt und die Werte hinzugefügt, wenn die Schlüssel gleich sind.

Mehr Aktionen

Wenn es um weitere Operationen mit HashMap geht, gibt es einige wichtige Konzepte und Methoden, die Ihnen helfen können, flexibler mit Ihren Daten umzugehen. Hier sind einige weitere Operationen auf HashMap:

1. Ermitteln Sie die Größe von HashMap

Um die Anzahl der Schlüssel-Wert-Paare in einer HashMap zu ermitteln, können Sie sizedie folgende Methode verwenden:

int size = hashMap.size();

Dadurch wird die Anzahl der Schlüssel-Wert-Paare in der HashMap zurückgegeben.

2. Stellen Sie fest, ob die HashMap leer ist

Sie können isEmptydie Methode verwenden, um zu überprüfen, ob HashMap leer ist:

boolean isEmpty = hashMap.isEmpty();

Wird zurückgegeben, wenn die HashMap leer ist true, andernfalls false.

3. Wiederbeschaffungswert

Wenn Sie den Wert in HashMap ersetzen möchten, können Sie die replacefolgende Methode verwenden:

hashMap.replace("apple", 4); // 将键"apple"对应的值替换为4

4. Löschen Sie HashMap

Um alle Schlüssel-Wert-Paare in einer HashMap zu löschen, können Sie cleardie Methode verwenden:

hashMap.clear(); // 清空HashMap

5. Bestimmen Sie, ob es einen Schlüssel oder einen Wert enthält

Sie können containsKeydie Methode verwenden, um zu überprüfen, ob HashMap einen bestimmten Schlüssel enthält:

boolean containsKey = hashMap.containsKey("apple"); // 检查是否包含键"apple"

Ebenso können Sie containsValueMethoden verwenden, um zu überprüfen, ob eine HashMap einen bestimmten Wert enthält:

boolean containsValue = hashMap.containsValue(2); // 检查是否包含值2

6. HashMap kopieren

Wenn Sie eine identische Kopie einer vorhandenen HashMap erstellen müssen, können Sie clonedie Methode verwenden:

Map<String, Integer> copyHashMap = new HashMap<>(hashMap);

Dadurch wird eine neue HashMap erstellt, hashMapdie mit identisch ist.

7. Holen Sie sich eine Sammlung von Schlüssel-Wert-Paaren

Zusätzlich zur Verwendung keySetder valuesMethoden und zum Abrufen einer Sammlung von Schlüsseln und Werten können Sie auch entrySetMethoden verwenden, um eine Sammlung von Schlüssel-Wert-Paaren abzurufen:

Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();

for (Map.Entry<String, Integer> entry : entrySet) {
    
    
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

Dadurch können Sie Schlüssel-Wert-Paare in einer HashMap durchlaufen.

8. HashMap synchronisieren

Wenn Sie eine HashMap zwischen mehreren Threads teilen müssen und die Thread-Sicherheit gewährleisten möchten, können Sie Collections.synchronizedMapmit der folgenden Methode eine synchronisierte HashMap erstellen:

Map<String, Integer> synchronizedHashMap = Collections.synchronizedMap(hashMap);

Dadurch wird eine threadsichere HashMap zurückgegeben.

9. Rufen Sie eine Sammlungsansicht von Schlüsseln oder Werten ab

Wenn Sie eine Sammlungsansicht der Schlüssel oder Werte in einer HashMap benötigen, können Sie keySetdie valuesMethoden und verwenden. Diese Sammlungsansichten sind mit der ursprünglichen HashMap verknüpft, und Änderungen an ihnen wirken sich auf die ursprüngliche HashMap aus.

10. Berechnen Sie den Hash-Code von HashMap

Um den Hash-Code einer HashMap zu berechnen, können Sie hashCodedie Methode verwenden:

int hashCode = hashMap.hashCode();

Dadurch wird der Hash-Codewert der HashMap zurückgegeben.

11. Umgang mit Standardwerten

Wenn Sie einen Wert aus einer HashMap abrufen möchten und der Schlüssel nicht vorhanden ist, geben Sie nicht nur den Standardwert zurück, sondern können auch eine Operation ausführen, wenn der Schlüssel nicht vorhanden ist. Sie können computeIfAbsentdies mit folgenden Methoden erreichen:

hashMap.computeIfAbsent("orange", key -> {
    
    
    // 在键"orange"不存在时,执行此操作并返回默认值0
    return 0;
});

Dadurch können Sie Berechnungen oder andere Operationen durchführen und gleichzeitig den Wert ermitteln.

Dies sind einige weitere Methoden und Konzepte für den Betrieb von HashMap, die Ihnen helfen können, HashMap-Sammlungen besser zu nutzen und zu verwalten. Wählen Sie je nach Bedarf die geeignete Methode zur Manipulation und Verarbeitung der Daten in der HashMap.

Vorsichtsmaßnahmen

Bei der Verwendung von HashMap sind einige Überlegungen zu beachten, um sicherzustellen, dass Ihr Code korrekt und effizient ausgeführt wird. Hier sind einige wichtige Überlegungen:

  1. Eindeutigkeit von Schlüsseln: Schlüssel in einer HashMap müssen eindeutig sein. Wenn Sie versuchen, denselben Schlüssel in eine HashMap einzufügen, überschreibt der neue Wert den alten Wert.

  2. Werte können wiederholt werden: Werte in HashMap können wiederholt werden. Mehrere Schlüssel können demselben Wert zugeordnet werden.

  3. Leerer Schlüssel: HashMap erlaubt die Verwendung nullals Schlüssel, es kann jedoch nur ein nullSchlüssel vorhanden sein. nullDas bedeutet, dass bei der Eingabe mehrerer Schlüssel die nachfolgenden nullSchlüssel die vorherigen überschreiben.

  4. Parallelität: HashMap ist nicht threadsicher. Wenn Sie eine HashMap zwischen mehreren Threads teilen, stellen Sie sicher, dass der Zugriff entsprechend synchronisiert wird, oder verwenden Sie eine ConcurrentHashMapISO-Thread-sichere Sammlung.

  5. Leistung: Die Leistung von HashMap ist normalerweise sehr gut, in einigen Fällen kann es jedoch zu Hash-Kollisionen kommen, die zu Leistungseinbußen führen. Um die Leistung zu optimieren, sollten Sie die anfängliche Kapazität und den Auslastungsfaktor der HashMap anpassen.

  6. Hash-Funktion: HashMap verwendet eine Hash-Funktion, um Schlüssel Speicherorten zuzuordnen. Wenn der Hash-Code eines Schlüssels ungleichmäßig verteilt ist, kann es zu Hash-Kollisionen kommen. Stellen Sie daher sicher, dass die Methoden Ihres benutzerdefinierten Objekts hashCodekorrekt implementiert sind, um eine bessere Leistung zu erzielen.

  7. Durchlaufreihenfolge: Die Durchlaufreihenfolge von HashMap ist nicht die Einfügungsreihenfolge oder eine bestimmte Reihenfolge. Erwägen Sie dies, wenn Sie in einer bestimmten Reihenfolge auf Schlüssel-Wert-Paare zugreifen müssen LinkedHashMap.

  8. Kapazität und Auslastungsfaktor: Erwägen Sie die Auswahl einer geeigneten Anfangskapazität und eines Auslastungsfaktors basierend auf dem Datenvolumen. Eine größere Anfangskapazität kann Hash-Kollisionen reduzieren und die Leistung verbessern.

  9. Raumkomplexität: Die Raumkomplexität von HashMap beträgt O(n), wobei n die Anzahl der gespeicherten Schlüssel-Wert-Paare ist. Verwenden Sie große HashMap daher mit Vorsicht, um eine übermäßige Speichernutzung zu vermeiden.

  10. Verwenden Sie Generics: Wenn Sie eine HashMap erstellen, verwenden Sie nach Möglichkeit Generics, um die Typen von Schlüsseln und Werten anzugeben, um die Typsicherheit zu verbessern.

  11. Bereinigen Sie nicht mehr benötigte Schlüssel-Wert-Paare rechtzeitig: Wenn ein bestimmtes Schlüssel-Wert-Paar in der HashMap nicht mehr benötigt wird, removelöschen Sie es mithilfe von Methoden oder anderen Methoden rechtzeitig, um Speicher und Ressourcen freizugeben.

  12. Ausnahmebehandlung: Berücksichtigen Sie bei der Verwendung getvon Methoden zum Abrufen von Werten den Fall, dass der Schlüssel nicht vorhanden ist, um dies zu vermeiden NullPointerException. Sie können containsKeyMethoden oder bedingte Anweisungen verwenden, um zu überprüfen, ob ein Schlüssel vorhanden ist.

  13. Leistungsüberwachung: Wenn HashMap in leistungskritischen Anwendungen verwendet wird, sollten Sie die Verwendung von Leistungsüberwachungstools in Betracht ziehen, um die HashMap-Nutzung zu analysieren und zu optimieren.

  14. Backup: Sichern Sie wichtige Daten in HashMap regelmäßig, um Datenverlust oder -schäden zu verhindern.

Wenn Sie diese Überlegungen berücksichtigen, können Sie HashMap effizienter nutzen und sicherstellen, dass Ihr Code in verschiedenen Situationen ordnungsgemäß funktioniert.

Zusammenfassen

HashMap ist eine sehr verbreitete und nützliche Sammlung in der Java-Programmierung, die schnelle Funktionen zum Speichern und Abrufen von Schlüssel-Wert-Paaren bietet. In diesem Artikel wird die grundlegende Verwendung von HashMap vorgestellt, einschließlich des Erstellens, Hinzufügens, Abrufens, Löschens und Durchlaufens von Schlüssel-Wert-Paaren. Darüber hinaus besprechen wir fortgeschrittene Verwendungsmöglichkeiten wie den Umgang mit Kollisionen, Kapazitäts- und Auslastungsfaktoren, das Durchlaufen von Schlüssel- und Wertesammlungen, das Überschreiben von Standardwerten und das Zusammenführen von Vorgängen. Wenn Sie dieses Wissen beherrschen, können Sie HashMap besser zur Datenverarbeitung nutzen und die Effizienz und Lesbarkeit Ihres Codes verbessern.

Supongo que te gusta

Origin blog.csdn.net/qq_21484461/article/details/132913458
Recomendado
Clasificación