- java.lang.Object
- java.util.AbstractMap <K,V>
- java.util.HashMap<K,V>
- Typparameter
K- der Typ der Schlüssel, die diese Map verwaltetV- 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 vonAls 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 beiSchlü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 werfennach 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
-
-
嵌套类汇总
-
嵌套类/接口声明在类 java.util.AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
-
-
构造方法摘要
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 derMapangegebenen sind.
-
方法摘要
Alle Methoden Instanzmethoden Konkrete Methoden Variablen und Typ Methode Beschreibung voidclear()Entfernt alle Zuordnungen aus dieser Map.Objectclone()Gibt eine flache Kopie dieserHashMapBeispiels zurück: Schlüssel und Werte selbst werden nicht geklont.Vcompute(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).VcomputeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)Wenn der angegebene Schlüssel noch nicht mit einem Wert verknüpft ist (oder aufnullabgebildet ist), wird versucht, seinen Wert mit der angegebenen Zuordnungsfunktion zu berechnen und in diese Map einzutragen, außernull。VcomputeIfPresent(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.booleancontainsKey(Object key)Wenn diese Map eine Zuordnung für den angegebenen Schlüssel enthält, wirdtrue。booleancontainsValue(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.Vget(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。booleanisEmpty()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.Vmerge(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.Vput(K key, V value)Verknüpft den angegebenen Wert mit dem angegebenen Schlüssel in dieser Map.voidputAll(Map<? extends K,? extends V> m)Kopiert alle Zuordnungen aus der angegebenen Map in diese Map.Vremove(Object key)Entfernt die Zuordnung für den angegebenen Schlüssel aus dieser Map, falls vorhanden.intsize()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.-
声明方法的类 java.util.AbstractMap
equals, hashCode, toString
-
声明方法的接口 java.util.Map
equals, forEach, getOrDefault, hashCode, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
构造方法详细信息
-
HashMap
public HashMap(int initialCapacity, float loadFactor)Erzeugt eine leere Map mit der angegebenen Anfangskapazität und dem angegebenen LastfaktorHashMap。- Parameter
initialCapacity- AnfangskapazitätloadFactor- Lastfaktor AusnahmeIllegalArgumentException- 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. AusnahmeIllegalArgumentException- 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. AusnahmeNullPointerException- wenn die angegebene Map null ist
-
-
方法详细信息
-
size
public int size()
Gibt die Anzahl der Schlüssel-Wert-Zuordnungen in dieser Map zurück.
-
isEmpty
public boolean isEmpty()
Gibt zurück, wenn diese Map keine Schlüssel-Wert-Zuordnungen enthälttrue。
-
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üsselk到值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ückgabewert
nullDer 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 wirdvalue- Der Wert, der dem angegebenen Schlüssel zugeordnet wird. Ergebnis: Der zuvor zugeordnete WertkeyodernullWenn 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. AusnahmeNullPointerException- 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 keinekeyZuordnung vorhanden ist, der frühere Wert, derkeyodernullzugeordnet 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.
-
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 Ergebnistruewenn 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,retainAllundclear. Sie unterstützt nicht die OperationenaddoderaddAll操作。
-
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 OperationenaddoderaddAll操作。
-
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 dieaddoderaddAll操作。
-
computeIfAbsent
public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Wenn der angegebene Schlüssel noch keinem Wert zugeordnet ist (oder aufnullabgebildet ist), wird versucht, seinen Wert mit der angegebenen Mapping-Funktion zu berechnen und in diese Map einzutragen, außer beinull. Wenn die Mapping-Funktionnullzurü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-Map
Map<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 eine
ConcurrentModificationException.- Specified by:
computeIfAbsent在界面Map<K,V>- Parameter
key- Schlüssel, dem der angegebene Wert zugeordnet werden sollmappingFunction- 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 AusnahmeConcurrentModificationException- 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-Funktionnullzurü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 eine
ConcurrentModificationException.- Specified by:
computeIfPresent在界面Map<K,V>- Parameter
key- Schlüssel, dem der angegebene Wert zugeordnet istremappingFunction- Remapping-Funktion zur Berechnung des Werts Ergebnis Der neue Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn keiner vorhanden ist AusnahmeConcurrentModificationException- 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:(Die Methodemap.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))merge()ist für solche Zwecke meist einfacher zu verwenden.) Gibt die Neuzuordnungsfunktionnullzurü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öglichkeiten
ConcurrentModificationException.- Specified by:
compute在界面Map<K,V>- Parameter
key- der Schlüssel, dem der angegebene Wert zugeordnet istremappingFunction- die Neuzuordnungsfunktion zur Berechnung des Wertes Rückgabewert der neue Wert, der dem angegebenen Schlüssel zugeordnet ist, oder null, wenn keiner existiert AusnahmeConcurrentModificationException- 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 Neuzuordnungsfunktion
nullzurü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öglichkeiten
ConcurrentModificationException.- Specified by:
merge在界面Map<K,V>- Parameter
key- der Schlüssel, dem der Ergebniswert zugeordnet istvalue- 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 istremappingFunction- 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 AusnahmeConcurrentModificationException- wenn erkannt wird, dass die Neuzuordnungsfunktion diese Zuordnung ändert
-
-