模块  java.base
Paket java.util

Klasse HashMap<K,​V>

  • Typparameter
    K- der Typ der Schlüssel, die diese Map verwaltet
    V- der Typ der Werte in der Map. Implementierte Schnittstellen:
    Serializable , Cloneable , Map<K,​V>
    Bekannte direkte Unterklassen:
    LinkedHashMap , PrinterStateReasons

    public class HashMap<K,​V>
    extends AbstractMap<K,​V>
    implements Map<K,​V>, Cloneable, Serializable
    Die Implementierung basiert auf einer Hashtabelle und implementiert dieMapSchnittstelle. Diese Implementierung bietet alle optionalen Map-Operationen und erlaubtnullWerte undnullSchlüssel. (HashMapDie Klasse entspricht ungefährHashtable, ist aber nicht synchronisiert und erlaubt Nullwerte.) Diese Klasse garantiert keine Reihenfolge der Map. Insbesondere garantiert sie nicht, dass die Reihenfolge über die Zeit konstant bleibt. Die Implementierung bietet konstante Zeit für die Grundoperationen (

    get和put), vorausgesetzt, die Hashfunktion verteilt die Elemente korrekt auf die Buckets. Die Iteration über die Collection-Views benötigt Zeit proportional zurHashMapDie Iterationszeit wächst proportional zur Kapazität (Anzahl der Buckets) plus der Größe (Anzahl der Einträge) der Instanz. Ist Iterationsperformance relevant, sollte die anfängliche Kapazität nicht zu hoch gesetzt werden. Auch der Lastfaktor sollte nicht zu niedrig gewählt werden.

    HashMapEine Instanz von

    Als allgemeine Regel bietet der Standard-Lastfaktor (.75) einen guten Kompromiss zwischen Zeit- und Platzkosten. Höhere Werte verringern den Platzbedarf. Sie erhöhen jedoch die Suchkosten.HashMapAls allgemeine Regel bietet der Standard-Lastfaktor (0.75) einen guten Kompromiss zwischen Zeit- und Platzkosten. Ein höherer Wert verringert den Platzbedarf, erhöht aber die Suchkosten (sichtbar inget和putund

    如果要将多个映射存储在HashMapWenn Sie viele Zuordnungen in einerhashCode()Instanz speichern, speichert eine Map mit ausreichend großer Anfangskapazität die Daten effizienter. Das ist besser als automatisches Rehashing bei Bedarf. Beachten Sie, dass die Verwendung vieler Schlüssel mit identischemComparabledie Leistung jeder Hashtabelle zuverlässig verlangsamt. Um die Auswirkung zu verbessern, kann diese Klasse bei

    Schlüssel die Vergleichsreihenfolge verwenden, um Gleichstände aufzulösen.Collections.synchronizedMap方法“包装”地图。 这最好在创建时完成,以防止意外地不同步访问地图:

      Map m = Collections.synchronizedMap(new HashMap(...)); 

    Methode, um die Map zu „umhüllen“. Erledigen Sie das am besten bei der Erstellung, um versehentlich unsynchronisierten Zugriff zu verhindern:removeAlle Iteratoren, die von den „Collection-View-Methoden“ dieser Klasse zurückgegeben werden, sind fail-fast: Modifizieren Sie die Map nach Erzeugung des Iterators strukturell, außer durch die eigeneConcurrentModificationExceptionMethode des Iterators, wirft der Iterator

    . Bei gleichzeitiger Modifikation schlägt der Iterator also schnell und sauber fehl. Er riskiert kein willkürliches, nicht-deterministisches Verhalten zu einem unbestimmten späteren Zeitpunkt.ConcurrentModificationExceptionBeachten Sie, dass das Fail-Fast-Verhalten eines Iterators nicht garantiert ist. Bei unsynchronisierten gleichzeitigen Modifikationen sind im Allgemeinen keine harten Garantien möglich. Fail-Fast-Iteratoren werfen

    nach bestem Bemühen. Programme, die für ihre Korrektheit von dieser Ausnahme abhängen, sind fehlerhaft: Verwenden Sie das Fail-Fast-Verhalten des Iterators nur zur Fehlererkennung.

    Diese Klasse ist Mitglied des Java Collections Framework.
    Object.hashCode()Seit Version: 1.2 Siehe auch:Collection,Map,TreeMap,Hashtable, Serialized Form
    • 构造方法摘要

      Konstruktor Konstruktor Beschreibung
      HashMap()
      Konstruiert eine leereHashMap 。
      HashMap​(int initialCapacity)
      Konstruiert eine leereHashMap 。
      HashMap​(int initialCapacity, float loadFactor)
      Konstruiert eine leereHashMap 。
      HashMap​(Map<? extends K,​? extends V> m)
      Erzeugt eine neueHashMap , deren Zuordnungen identisch mit der Mapangegebenen sind.
    • 方法摘要

      Alle Methoden Instanzmethoden Konkrete Methoden Variablen und Typ Methode Beschreibung
      void clear()
      Entfernt alle Zuordnungen aus dieser Map.
      Object clone()
      Gibt eine flache Kopie dieserHashMapBeispiels zurück: Schlüssel und Werte selbst werden nicht geklont.
      V compute​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      Versucht, eine Zuordnung für den angegebenen Schlüssel und seinen aktuellen zugeordneten Wert zu berechnen (wenn keine aktuelle Zuordnung vorhanden ist,null ).
      V computeIfAbsent​(K key, Function<? super K,​? extends V> mappingFunction)
      Wenn der angegebene Schlüssel noch nicht mit einem Wert verknüpft ist (oder aufnull abgebildet ist), wird versucht, seinen Wert mit der angegebenen Zuordnungsfunktion zu berechnen und in diese Map einzutragen, außer null 。
      V computeIfPresent​(K key, BiFunction<? super K,​? super V,​? extends V> remappingFunction)
      Wenn der Wert für den angegebenen Schlüssel vorhanden und nicht null ist, wird versucht, eine neue Zuordnung unter Berücksichtigung des Schlüssels und seines aktuellen zugeordneten Werts zu berechnen.
      boolean containsKey​(Object key)
      Wenn diese Map eine Zuordnung für den angegebenen Schlüssel enthält, wirdtrue 。
      boolean containsValue​(Object value)
      Wenn diese Map einen oder mehrere Schlüssel auf den angegebenen Wert abbildet, wirdtrue 。
      Set<Map.Entry<K,​V>> entrySet()
      Gibt eineSet-Ansicht der in dieser Map enthaltenen Zuordnungen zurück.
      V get​(Object key)
      Gibt den Wert zurück, auf den der angegebene Schlüssel abgebildet ist. Enthält diese Map keine Zuordnung für den Schlüssel, wirdnull 。
      boolean isEmpty()
      Wenn diese Map keine Schlüssel-Wert-Zuordnung enthält, wirdtrue 。
      Set<K> keySet()
      Gibt eineSet-Ansicht der in dieser Map enthaltenen Schlüssel zurück.
      V merge​(K key, V value, BiFunction<? super V,​? super V,​? extends V> remappingFunction)
      Wenn der angegebene Schlüssel noch nicht mit einem Wert verknüpft ist oder mit null verknüpft ist, wird er mit dem angegebenen Nicht-null-Wert verknüpft.
      V put​(K key, V value)
      Verknüpft den angegebenen Wert mit dem angegebenen Schlüssel in dieser Map.
      void putAll​(Map<? extends K,​? extends V> m)
      Kopiert alle Zuordnungen aus der angegebenen Map in diese Map.
      V remove​(Object key)
      Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Map, falls vorhanden.
      int size()
      Gibt die Anzahl der Schlüssel-Wert-Zuordnungen in dieser Map zurück.
      Collection<V> values()
      Gibt eineCollection-Ansicht der in dieser Map enthaltenen Werte zurück.
    • 构造方法详细信息

      • HashMap

        public HashMap​(int initialCapacity,
                       float loadFactor)
        Erzeugt eine leere Map mit der angegebenen Anfangskapazität und dem angegebenen LastfaktorHashMap 。
        Parameter
        initialCapacity- Anfangskapazität
        loadFactor- Lastfaktor Ausnahme
        IllegalArgumentException- wenn die Anfangskapazität negativ ist oder der Lastfaktor nicht positiv ist
      • HashMap

        public HashMap​(int initialCapacity)
        Konstruiert eine leere HashMap mit der angegebenen Anfangskapazität und dem Standard-Lastfaktor (0.75)HashMap 。
        Parameter
        initialCapacity- Anfangskapazität. Ausnahme
        IllegalArgumentException- wenn die Anfangskapazität negativ ist.
      • HashMap

        public HashMap()
        Konstruiert eine leere HashMap mit der Standard-Anfangskapazität (16) und dem Standard-Lastfaktor (0.75)HashMap 。
      • HashMap

        public HashMap​(Map<? extends K,​? extends V> m)
        Konstruiert eine neue HashMapHashMap , deren Zuordnungen identisch mit der angegebenenMapsind.HashMapDabei wird der Standard-Lastfaktor (0.75) und eine Anfangskapazität verwendet, die groß genug für die angegebenenMapZuordnungen ist.
        Parameter
        m - mZuordnungen, die in diese Map eingefügt werden. Ausnahme
        NullPointerException- wenn die angegebene Map null ist
    • 方法详细信息

      • size

        public int size()
        Gibt die Anzahl der Schlüssel-Wert-Zuordnungen in dieser Map zurück.
        Specified by:
        size在界面 Map<K,​V>
        Überschreibt:
        size类 AbstractMap<K,​V>
        Ergebnis: Anzahl der Schlüssel-Wert-Zuordnungen in dieser Map
      • isEmpty

        public boolean isEmpty()
        Gibt zurück, wenn diese Map keine Schlüssel-Wert-Zuordnungen enthälttrue 。
        Specified by:
        isEmpty在界面 Map<K,​V>
        Überschreibt:
        isEmpty类 AbstractMap<K,​V>
        Ergebnis
        trueWenn diese Zuordnung keine Schlüssel-Wert-Zuordnung enthält
      • get

        public V get​(Object key)
        Gibt den Wert zurück, dem der angegebene Schlüssel zugeordnet ist. Enthält diese Zuordnung keine Zuordnung für den Schlüssel, gibt sienullzurück. Genauer gesagt: Enthält diese Zuordnung eine Zuordnung vom Schlüssel

        k到值vderart, dass(key==null ? k==null : key.equals(k)) gilt, gibt diese Methodevzurück. Andernfalls gibt sienullzurück. (Es gibt höchstens eine solche Zuordnung.)

        RückgabewertnullDer Rückgabewert bedeutet nicht unbedingt, dass die Zuordnung keine Zuordnung für den Schlüssel enthält. Die Zuordnung ordnet den Schlüssel möglicherweise explizitnullzu. Verwenden Sie die OperationcontainsKeyum diese beiden Fälle zu unterscheiden.

        Specified by:
        get在界面 Map<K,​V>
        Überschreibt:
        get类 AbstractMap<K,​V>
        Parameter
        key- Der Schlüssel, dessen zugeordneter Wert zurückgegeben werden soll. Ergebnis: Der Wert, dem der angegebene Schlüssel zugeordnet ist. Enthält diese Zuordnung keine Zuordnung für den Schlüssel,
        null
        Siehe auch:
        put(Object, Object)
      • containsKey

        public boolean containsKey​(Object key)
        Gibttrue 。
        Specified by:
        containsKey在界面 Map<K,​V>
        Überschreibt:
        containsKey在类 AbstractMap<K,​V>
        Parameter
        key- Der Schlüssel, dessen Vorhandensein in dieser Zuordnung geprüft werden soll. Ergebnis:
        truetrue, wenn diese Zuordnung eine Zuordnung für den angegebenen Schlüssel enthält.
      • put

        public V put​(K key,
                     V value)
        Ordnet den angegebenen Wert dem angegebenen Schlüssel in dieser Zuordnung zu. Enthält die Zuordnung bereits eine Zuordnung für den Schlüssel, ersetzt sie den alten Wert.
        Specified by:
        put在界面 Map<K,​V>
        Überschreibt:
        put在课堂上 AbstractMap<K,​V>
        Parameter
        key- Der Schlüssel, dem der angegebene Wert zugeordnet wird
        value- Der Wert, der dem angegebenen Schlüssel zugeordnet wird. Ergebnis: Der zuvor zugeordnete Wert
        key odernullWenn keine Zuordnung vorhanden istkey. (AnullDer Rückgabewert zeigt auch an, dass diese Zuordnung früher verbunden warnull与key).
      • putAll

        public void putAll​(Map<? extends K,​? extends V> m)
        Kopiert alle Zuordnungen aus der angegebenen Map in diese Map. Diese Zuordnungen ersetzen alle Zuordnungen dieser Map für Schlüssel, die in der angegebenen Map enthalten sind.
        Specified by:
        putAll在界面 Map<K,​V>
        Überschreibt:
        putAll在类 AbstractMap<K,​V>
        Parameter
        m- Zuordnungen, die in dieser Map gespeichert werden sollen. Ausnahme
        NullPointerException- wenn die angegebene Map null ist
      • remove

        public V remove​(Object key)
        Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Map, falls vorhanden.
        Specified by:
        remove在界面 Map<K,​V>
        Überschreibt:
        remove在类 AbstractMap<K,​V>
        Parameter
        key- Der Schlüssel, dessen Zuordnung entfernt werden soll. Ergebnis. Wenn keine
        keyZuordnung vorhanden ist, der frühere Wert, derkeyoder nullzugeordnet war. (AnullDer Rückgabewert zeigt auch an, dass diese Zuordnung früher verbunden warnull与key).
      • clear

        public void clear()
        Entfernt alle Zuordnungen aus dieser Map. Nach diesem Aufruf ist die Map leer.
        Specified by:
        clear在界面 Map<K,​V>
        Überschreibt:
        clearin der Klasse AbstractMap<K,​V>
      • containsValue

        public boolean containsValue​(Object value)
        Gibt zurück, wenn diese Map einen oder mehrere Schlüssel auf den angegebenen Wert abbildettrue 。
        Specified by:
        containsValue在界面 Map<K,​V>
        Überschreibt:
        containsValue类 AbstractMap<K,​V>
        Parameter
        value- Der Wert, dessen Vorhandensein in dieser Map getestet wird Ergebnis
        truewenn diese Map einen oder mehrere Schlüssel auf den angegebenen Wert abbildet
      • keySet

        public Set<K> keySet()
        Gibt eine Ansicht der in dieser Map enthaltenen Schlüssel zurück.SetDie Menge wird von der Map unterstützt, daher spiegeln Änderungen an der Map die Menge wider und umgekehrt. Wenn die Map während der Iteration über die Menge geändert wird (außer durch eine eigeneremoveOperation des Iterators), ist das Ergebnis der Iteration undefiniert. Die Menge unterstützt das Entfernen von Elementen, das heißt das Entfernen der entsprechenden Zuordnung aus der Map, über die OperationenIterator.remove , Set.remove , removeAll , retainAll undclear. Sie unterstützt nicht die Operationenaddoder addAll操作。
        Specified by:
        keySet在界面 Map<K,​V>
        Überschreibt:
        keySet在类 AbstractMap<K,​V>
        Ergebnis Eine Mengenansicht der in dieser Map enthaltenen Schlüssel
      • values

        public Collection<V> values()
        Gibt eine Ansicht der in dieser Map enthaltenen Werte zurück.CollectionDie Collection wird von der Map unterstützt, daher spiegeln Änderungen an der Map die Collection wider und umgekehrt. Wenn die Map während der Iteration über die Collection geändert wird (außer durch eine eigeneremoveOperation des Iterators), ist das Ergebnis der Iteration undefiniert. Die Collection unterstützt das Entfernen von Elementen, das heißt das Entfernen der entsprechenden Zuordnung aus der Map, über die OperationenIterator.remove , Collection.remove , removeAll , retainAll和clear. Sie unterstützt nicht die Operationenaddoder addAll操作。
        Specified by:
        values在界面 Map<K,​V>
        Überschreibt:
        values在课堂上 AbstractMap<K,​V>
        Ergebnis Eine Ansicht der in dieser Map enthaltenen Werte
      • entrySet

        public Set<Map.Entry<K,​V>> entrySet()
        Gibt eine Ansicht der in dieser Map enthaltenen Zuordnungen zurück.SetDie Menge wird von der Map unterstützt, daher spiegeln Änderungen an der Map die Menge wider und umgekehrt. Wenn die Map während der Iteration über die Menge geändert wird (außer durch eine eigeneremoveOperation des Iterators oder durch eine Operation auf einem von der Iteration zurückgegebenen Map-EintragsetValueDer Vorgang wird ausgeführt. Das Ergebnis der Iteration ist dann undefiniert. Diese Gruppe unterstützt das Entfernen von Elementen, also das Entfernen der entsprechenden Zuordnung aus der Map, über dieIterator.remove , Set.remove , removeAll , retainAll和clearVorgänge. Sie unterstützt nicht dieaddoder addAll操作。
        Specified by:
        entrySet在界面 Map<K,​V>
        Ergebnis Die Set-Ansicht der in dieser Map enthaltenen Zuordnungen
      • computeIfAbsent

        public V computeIfAbsent​(K key,
                                 Function<? super K,​? extends V> mappingFunction)
        Wenn der angegebene Schlüssel noch keinem Wert zugeordnet ist (oder aufnull abgebildet ist), wird versucht, seinen Wert mit der angegebenen Mapping-Funktion zu berechnen und in diese Map einzutragen, außer beinull. Wenn die Mapping-Funktion

        nullzurückgibt, wird keine Zuordnung erfasst. Wenn die Mapping-Funktion selbst eine (ungeprüfte) Ausnahme auslöst, wird die Ausnahme erneut ausgelöst, und es wird keine Zuordnung erfasst. Die häufigste Verwendung ist das Erstellen eines neuen Objekts als anfänglicher zugeordneter Wert oder als gemerktes Ergebnis, wie in:

           map.computeIfAbsent(key, k -> new Value(f(k)));  

        Oder die Implementierung einer Multi-Value-MapMap<K,Collection<V>>, die mehrere Werte pro Schlüssel unterstützt:

           map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);  

        Die Mapping-Funktion darf diese Map während der Berechnung nicht ändern.

        Wenn erkannt wird, dass die Mapping-Funktion diese Map während der Berechnung geändert hat, wirft die Methode nach bestem Bemühen eineConcurrentModificationException.

        Specified by:
        computeIfAbsent在界面 Map<K,​V>
        Parameter
        key- Schlüssel, dem der angegebene Wert zugeordnet werden soll
        mappingFunction- Mapping-Funktion zur Berechnung des Werts Ergebnis Der aktuelle (vorhandene oder berechnete) Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn der berechnete Wert null ist Ausnahme
        ConcurrentModificationException- wenn erkannt wird, dass die Mapping-Funktion diese Map geändert hat
      • computeIfPresent

        public V computeIfPresent​(K key,
                                  BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Wenn der Wert für den angegebenen Schlüssel vorhanden und nicht null ist, wird versucht, eine neue Zuordnung unter Berücksichtigung des Schlüssels und seines aktuellen zugeordneten Werts zu berechnen. Wenn die Remapping-Funktion

        nullzurückgibt, wird die Zuordnung entfernt. Wenn die Remapping-Funktion selbst eine (ungeprüfte) Ausnahme auslöst, wird die Ausnahme erneut ausgelöst, und die aktuelle Zuordnung bleibt unverändert.

        Die Remapping-Funktion darf diese Map während der Berechnung nicht ändern.

        Wenn erkannt wird, dass die Remapping-Funktion diese Map während der Berechnung geändert hat, wirft die Methode nach bestem Bemühen eineConcurrentModificationException.

        Specified by:
        computeIfPresent在界面 Map<K,​V>
        Parameter
        key- Schlüssel, dem der angegebene Wert zugeordnet ist
        remappingFunction- Remapping-Funktion zur Berechnung des Werts Ergebnis Der neue Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn keiner vorhanden ist Ausnahme
        ConcurrentModificationException- wenn erkannt wird, dass die Remapping-Funktion diese Map geändert hat
      • compute

        public V compute​(K key,
                         BiFunction<? super K,​? super V,​? extends V> remappingFunction)
        Berechnet eine Zuordnung für den angegebenen Schlüssel und seinen aktuellen zugeordneten Wert (falls kein aktueller Wert vorhanden ist,null). Zum Beispiel, um einen Eintrag zu erstellen oder anzuhängenStringeiner Wertzuordnung:
           map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) 
        (Die Methodemerge()ist für solche Zwecke meist einfacher zu verwenden.) Gibt die Neuzuordnungsfunktion

        nullzurück, wird die Zuordnung entfernt (oder bleibt entfernt, falls sie ursprünglich nicht existierte). Wirft die Neuzuordnungsfunktion selbst eine (nicht geprüfte) Ausnahme, wird die Ausnahme erneut ausgelöst, und die aktuelle Zuordnung bleibt unverändert.

        Die Neuzuordnungsfunktion darf diese Zuordnung während der Berechnung nicht ändern.

        Wird erkannt, dass die Neuzuordnungsfunktion die Zuordnung während der Berechnung ändert, wirft die Methode nach besten MöglichkeitenConcurrentModificationException.

        Specified by:
        compute在界面 Map<K,​V>
        Parameter
        key- der Schlüssel, dem der angegebene Wert zugeordnet ist
        remappingFunction- die Neuzuordnungsfunktion zur Berechnung des Wertes Rückgabewert der neue Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn keiner existiert Ausnahme
        ConcurrentModificationException- wenn erkannt wird, dass die Neuzuordnungsfunktion diese Zuordnung ändert
      • merge

        public V merge​(K key,
                       V value,
                       BiFunction<? super V,​? super V,​? extends V> remappingFunction)
        Ist der angegebene Schlüssel noch keinem Wert zugeordnet oder null zugeordnet, wird er dem angegebenen nicht-leeren Wert zugeordnet. Andernfalls wird der zugeordnete Wert durch das Ergebnis der angegebenen Neuzuordnungsfunktion ersetzt, oder entfernt, wenn das Ergebnisnullist. Diese Methode ist nützlich, wenn mehrere zugeordnete Werte kombiniert werden. Zum Beispiel, um einen Eintrag zu erstellen oder anzuhängenString msgeiner Wertzuordnung:
           map.merge(key, msg, String::concat)  

        Gibt die Neuzuordnungsfunktionnullzurück, wird die Zuordnung entfernt. Wirft die Neuzuordnungsfunktion selbst eine (nicht geprüfte) Ausnahme, wird die Ausnahme erneut ausgelöst, und die aktuelle Zuordnung bleibt unverändert.

        Die Neuzuordnungsfunktion darf diese Zuordnung während der Berechnung nicht ändern.

        Wird erkannt, dass die Neuzuordnungsfunktion die Zuordnung während der Berechnung ändert, wirft die Methode nach besten MöglichkeitenConcurrentModificationException.

        Specified by:
        merge在界面 Map<K,​V>
        Parameter
        key- der Schlüssel, dem der Ergebniswert zugeordnet ist
        value- der nicht-leere Wert, der mit dem vorhandenen, dem Schlüssel zugeordneten Wert zusammengeführt werden soll, oder der dem Schlüssel zugeordnete Wert, falls kein vorhandener Wert existiert oder null zugeordnet ist
        remappingFunction- die Neuzuordnungsfunktion zur Neuberechnung des Wertes, falls er existiert Rückgabewert der neue Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn kein Wert dem Schlüssel zugeordnet ist Ausnahme
        ConcurrentModificationException- wenn erkannt wird, dass die Neuzuordnungsfunktion diese Zuordnung ändert
      • clone

        public Object clone()
        Gibt eine flache Kopie dieserHashMapInstanz zurück: Die Schlüssel und Werte selbst werden nicht geklont.
        Überschreibt:
        clone类 AbstractMap<K,​V>
        Rückgabewert eine flache Kopie dieser Zuordnung Siehe auch:
        Cloneable