- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- java.util.HashMap<K,V>
-
- tipo de parámetro
-
K- Tipo de claves mantenidas por este mapa -
V- Tipo de valores del mapa
- Todas las interfaces implementadas
-
Serializable,Cloneable,Map<K,V>
- Subclases directas conocidas:
-
LinkedHashMap,PrinterStateReasons
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
basada en la tabla hashMapImplementación de la interfaz. Esta implementación proporciona todas las operaciones de mapeo opcionales y permitenullvalores ynullla clave. (HashMapLa clase equivale aproximadamente aHashtable, excepto que no está sincronizada y permite valores nulos.) Esta clase no garantiza el orden del mapa; En particular, no garantiza que el orden permanezca constante con el tiempo.Esta implementación, para las operaciones básicas (
getyput) proporciona un rendimiento de tiempo constante, suponiendo que la función hash dispersa los elementos correctamente entre los cubos. La iteración sobre las vistas de colección requiere tiempo proporcional aHashMapla 'capacidad' de la instancia (número de cubos) más su tamaño (número de asignaciones de clave-valor). Por lo tanto, si el rendimiento de la iteración es importante, es muy importante no establecer la capacidad inicial demasiado alta (o el factor de carga demasiado bajo).HashMapLa instancia tiene dos parámetros que afectan su rendimiento:capacidad inicialyfactor de carga 。 capacidades el número de cubos en la tabla hash, y la capacidad inicial es simplemente la capacidad al momento de crear la tabla hash. factor de cargaes una medida del grado de ocupación que se permite que alcance la tabla hash antes de aumentar automáticamente su capacidad. Cuando el número de entradas en la tabla hash supera el producto del factor de carga y la capacidad actual, la tabla hash seráre-hasheada (es decir, se reconstruyen las estructuras de datos internas), de modo que la tabla hash tenga aproximadamente el doble de cubos.Como regla general, el factor de carga predeterminado (.75) ofrece un buen equilibrio entre los costos de tiempo y espacio. Los valores más altos reducen la sobrecarga de espacio, pero aumentan el costo de búsqueda (reflejado en
HashMapla mayoría de las operaciones de la clase, incluyendogetyput)。 Al establecer la capacidad inicial, se debe tener en cuenta el número esperado de entradas en el mapa y su factor de carga, para minimizar la cantidad de operaciones de re-hash. Si la capacidad inicial es mayor que el número máximo de entradas dividido por el factor de carga, no se realizará ninguna operación de re-hash.Si se van a almacenar varias asignaciones en
HashMapuna instancia, crear el mapa con una capacidad suficientemente grande permitirá que las asignaciones se almacenen de manera más eficiente, en lugar de expandir la tabla mediante re-hash automático según sea necesario. Tenga en cuenta que el uso de muchas claves con el mismohashCode()código hash es una forma segura de ralentizar el rendimiento de cualquier tabla hash. Para mejorar el impacto, cuando las claves seanComparableCuandocomparables, esta clase puede utilizar el orden de comparación entre las claves para ayudar a romper empates.Tenga en cuenta que esta implementación no está sincronizada. Si varios hilos acceden simultáneamente al mapa hash, y al menos uno de ellos modifica el mapa estructuralmente, entoncesdebesincronizarse externamente. (Una modificación estructural es cualquier operación que añade o elimina una o más asignaciones; cambiar únicamente el valor asociado a una clave que la instancia ya contiene no es una modificación estructural.) Normalmente esto se logra sincronizando sobre algún objeto que encapsule naturalmente el mapa. . Si no existe tal objeto, entonces se debe usar
Collections.synchronizedMapEl método “envuelve” el mapa. Esto se hace mejor en el momento de la creación, para evitar el acceso no sincronizado accidental al mapa:Map m = Collections.synchronizedMap(new HashMap(...));Los iteradores devueltos por todos los 'métodos de vista de colección' de esta clase sonde fallo rápido: si el mapa se modifica estructuralmente en cualquier momento después de la creación del iterador, excepto a través de sus propios
removemétodos de Iterator, el iterador lanzaráConcurrentModificationException。 Por lo tanto, en caso de modificación concurrente, el iterador falla rápida y limpiamente, en lugar de arriesgarse a un comportamiento arbitrario, no determinista, en un momento futuro incierto.Tenga en cuenta que el comportamiento de fallo rápido de los iteradores no puede garantizarse, ya que, en general, no es posible hacer ninguna garantía estricta en presencia de modificaciones concurrentes no sincronizadas. Los iteradores de fallo rápido lanzan excepciones de mejor esfuerzo.
ConcurrentModificationException。 Por lo tanto, es incorrecto escribir programas que dependan de esta excepción para garantizar su corrección:El comportamiento de fallo rápido de los iteradores debe utilizarse solo para detectar errores.Esta clase esJava Collections Frameworkmiembro de.
- Desde la versión:
- 1.2
- Véase también:
-
Object.hashCode(),Collection,Map,TreeMap,Hashtable, Serialized Form
-
-
Resumen de clases anidadas
-
Clases/interfaces anidadas declaradas en la clase java.util.AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
-
-
Resumen de constructores
Método constructor Constructor Descripción HashMap()Construye un mapa vacío con la capacidad inicial predeterminada (16) y el factor de carga predeterminado (0.75).HashMap。HashMap(int initialCapacity)Construye un mapa vacío con la capacidad inicial especificada y el factor de carga predeterminado (0.75).HashMap。HashMap(int initialCapacity, float loadFactor)Construye un mapa vacío con la capacidad inicial y el factor de carga especificados.HashMap。HashMap(Map<? extends K,? extends V> m)Construye un nuevoHashMap, cuyas asignaciones y las del especificadoMapson las mismas.
-
Resumen de métodos
Todos los métodos Método de instancia Método específico Variables y tipos Método Descripción voidclear()Elimina todas las asignaciones de este mapa.Objectclone()Devuelve esteHashMapCopia superficial de la instancia: las claves y los valores en sí mismos no se clonan.Vcompute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)Intenta calcular una asignación para la clave especificada y su valor asignado actual (si no hay asignación actual,null)。VcomputeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)Si la clave especificada no está asociada a un valor (o está asignada anull), entonces intenta calcular su valor utilizando la función de asignación dada e insertarlo en este mapa, a menos quenull。VcomputeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)Si el valor de la clave especificada está presente y no es nulo, intenta calcular una nueva asignación dada la clave y su valor asignado actual.booleancontainsKey(Object key)Si este mapa contiene una asignación para la clave especificada, devuelvetrue。booleancontainsValue(Object value)Si este mapa asigna una o más claves al valor especificado, devuelvetrue。Set<Map.Entry<K,V>>entrySet()Devuelve unaSetvista de las asignaciones contenidas en este mapa.Vget(Object key)Devuelve el valor al que está asignada la clave especificada, o null si este mapa no contiene ninguna asignación para la clave.null。booleanisEmpty()Si este mapa no contiene ninguna asignación de clave-valor, devuelvetrue。Set<K>keySet()Devuelve las claves contenidas en este mapaSetvista de las asignaciones contenidas en este mapa.Vmerge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)Si la clave especificada aún no está asociada con un valor o está asociada con null, la asocia con el valor no nulo dado.Vput(K key, V value)Asocia el valor especificado con la clave especificada en este mapa.voidputAll(Map<? extends K,? extends V> m)Copia todas las asignaciones del mapa especificado a este mapa.Vremove(Object key)Elimina la asignación de la clave especificada de este mapa, si existe.intsize()Devuelve el número de asignaciones de clave-valor de este mapa.Collection<V>values()Devuelve los valores contenidos en este mapaCollectionvista de las asignaciones contenidas en este mapa.-
Métodos declarados en la clase java.util.AbstractMap
equals, hashCode, toString
-
Métodos declarados en la clase java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Métodos declarados en la interfaz java.util.Map
equals, forEach, getOrDefault, hashCode, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
Detalles del constructor
-
HashMap
public HashMap(int initialCapacity, float loadFactor)Construye un mapa vacío con la capacidad inicial y el factor de carga especificados.HashMap。- Parámetros
-
initialCapacity- Capacidad inicial -
loadFactor- Factor de carga - Excepciones
-
IllegalArgumentException- Si la capacidad inicial es negativa o el factor de carga no es positivo
-
HashMap
public HashMap(int initialCapacity)
Construye un mapa vacío con la capacidad inicial especificada y el factor de carga predeterminado (0.75).HashMap。- Parámetros
-
initialCapacity- Capacidad inicial. - Excepciones
-
IllegalArgumentException- Si la capacidad inicial es negativa.
-
HashMap
public HashMap()
Construye un mapa vacío con la capacidad inicial predeterminada (16) y el factor de carga predeterminado (0.75).HashMap。
-
HashMap
public HashMap(Map<? extends K,? extends V> m)
Construye un nuevoHashMap, cuyas asignaciones y las del especificadoMapson las mismas.HashMapAl crearlo, se usa el factor de carga predeterminado (0,75) y una capacidad inicial suficiente para contener lo especificadoMapla capacidad inicial de las asignaciones.- Parámetros
-
m-mAsignaciones que se van a colocar en este mapa - Excepciones
-
NullPointerException- Si el mapa especificado es null
-
-
Detalles del método
-
size
public int size()
Devuelve el número de asignaciones de clave-valor de este mapa.
-
isEmpty
public boolean isEmpty()
Si este mapa no contiene ninguna asignación de clave-valor, devuelvetrue。
-
get
public V get(Object key)
Devuelve el valor al que está asignada la clave especificada, o null si este mapa no contiene ninguna asignación para la clave.null。Más formalmente, si este mapa contiene una asignación desde la clave
kal valorvtal que(key==null ? k==null : key.equals(k)), entonces este método devuelvev; de lo contrario, devuelvenull。 (puede haber como máximo una asignación de este tipo).Valor de retorno
nullno necesariamenteindica que el mapa no contiene una asignación para la clave; el mapa también puede asignar explícitamente la clave anull。 se puede utilizarcontainsKeyla operación para distinguir estos dos casos.- Specified by:
-
getEn la interfazMap<K,V> - Sobrescribe:
-
getClaseAbstractMap<K,V> - Parámetros
-
key- La clave cuyo valor asociado se va a devolver - Resultado
- El valor al que se asigna la clave especificada, si este mapa no contiene una asignación para la clave,
null - Véase también:
-
put(Object, Object)
-
containsKey
public boolean containsKey(Object key)
Si este mapa contiene una asignación para la clave especificada, devuelvetrue。- Specified by:
-
containsKeyEn la interfazMap<K,V> - Sobrescribe:
-
containsKeyEn la claseAbstractMap<K,V> - Parámetros
-
key- La clave cuya presencia en este mapa se va a probar - Resultado
-
trueSi este mapa contiene una asignación para la clave especificada.
-
put
public V put(K key, V value)
Asocia el valor especificado con la clave especificada en este mapa. Si el mapa contenía previamente una asignación para la clave, se reemplaza el valor anterior.- Specified by:
-
putEn la interfazMap<K,V> - Sobrescribe:
-
puten la claseAbstractMap<K,V> - Parámetros
-
key- La clave asociada con el valor especificado -
value- El valor asociado con la clave especificada - Resultado
-
el valor anterior asociado
key, onullsi no hay ninguna asignaciónkey。 (Anullel valor devuelto también puede indicar que el mapa asoció previamentenullykey)。
-
putAll
public void putAll(Map<? extends K,? extends V> m)
Copia todas las asignaciones del mapa especificado a este mapa. Estas asignaciones reemplazarán cualquier asignación que este mapa tenga para cualquier clave actualmente presente en el mapa especificado.- Specified by:
-
putAllEn la interfazMap<K,V> - Sobrescribe:
-
putAllEn la claseAbstractMap<K,V> - Parámetros
-
m- Asignaciones que se van a almacenar en este mapa - Excepciones
-
NullPointerException- Si el mapa especificado es null
-
remove
public V remove(Object key)
Elimina la asignación de la clave especificada de este mapa, si existe.- Specified by:
-
removeEn la interfazMap<K,V> - Sobrescribe:
-
removeEn la claseAbstractMap<K,V> - Parámetros
-
key- La clave cuya asignación se va a eliminar del mapa - Resultado
-
si no hay
keyasignación, entonces conkeyonullel valor anterior asociado. (Anullel valor devuelto también puede indicar que el mapa asoció previamentenullykey)。
-
clear
public void clear()
Elimina todas las asignaciones de este mapa. Después de que esta llamada regrese, el mapa estará vacío.
-
containsValue
public boolean containsValue(Object value)
Si este mapa asigna una o más claves al valor especificado, devuelvetrue。- Specified by:
-
containsValueEn la interfazMap<K,V> - Sobrescribe:
-
containsValueClaseAbstractMap<K,V> - Parámetros
-
value- El valor cuya presencia en este mapa se va a probar - Resultado
-
trueSi este mapa asigna una o más claves al valor especificado
-
keySet
public Set<K> keySet()
Devuelve las claves contenidas en este mapaSetvista de las asignaciones contenidas en este mapa. El conjunto está respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto, y viceversa. Si el mapa se modifica mientras se itera sobre el conjunto (excepto a través de la propiaremoveoperación), los resultados de la iteración no están definidos. El conjunto admite la eliminación de elementos, que elimina la asignación correspondiente del mapa, a través deIterator.remove,Set.remove,removeAll,retainAll, yclearoperaciones. No admiteaddoaddAlloperaciones.
-
values
public Collection<V> values()
Devuelve los valores contenidos en este mapaCollectionvista de las asignaciones contenidas en este mapa. La colección está respaldada por el mapa, por lo que los cambios en el mapa se reflejan en la colección, y viceversa. Si el mapa se modifica mientras se itera sobre el conjunto (excepto a través de la propiaremoveoperación), los resultados de la iteración no están definidos. La colección admite la eliminación de elementos, que elimina la asignación correspondiente del mapa, a través deIterator.remove,Collection.remove,removeAll,retainAllyclearoperaciones. No admiteaddoaddAlloperaciones.
-
entrySet
public Set<Map.Entry<K,V>> entrySet()
Devuelve unaSetvista de las asignaciones contenidas en este mapa. El conjunto está respaldado por el mapa, por lo que los cambios en el mapa se reflejan en el conjunto, y viceversa. Si el mapa se modifica mientras se itera sobre el conjunto (excepto a través de la propiaremoveoperación, o a través de la entrada del mapa devuelta por el iteradorsetValueoperación), los resultados de la iteración no están definidos. El conjunto admite la eliminación de elementos, que elimina la asignación correspondiente del mapa, a través deIterator.remove,Set.remove,removeAll,retainAllyclearoperaciones. No admiteaddoaddAlloperaciones.
-
computeIfAbsent
public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Si la clave especificada no está asociada a un valor (o está asignada anull), entonces intenta calcular su valor usando la función de asignación dada y lo introduce en este mapa, a menos quenull。Si la función de asignación devuelve
null, no se registra ninguna asignación. Si la propia función de asignación lanza una excepción (no comprobada), se relanza la excepción y no se registra ninguna asignación. El uso más común es construir un nuevo objeto que sirva como valor de asignación inicial o resultado memorizado, como:map.computeIfAbsent(key, k -> new Value(f(k)));o implementar un mapa multivalor
Map<K,Collection<V>>, donde cada clave admite múltiples valores:map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);La función de asignación no debe modificar este mapa durante el cálculo.
Si se detecta que la función de asignación modificó este mapa durante el cálculo, el método lanzará, sobre una base de mejor esfuerzo,
ConcurrentModificationException。- Specified by:
-
computeIfAbsentEn la interfazMap<K,V> - Parámetros
-
key- La clave asociada con el valor especificado -
mappingFunction- Función de asignación utilizada para calcular el valor - Resultado
- El valor actual (existente o calculado) asociado con la clave especificada, o null si el valor calculado es null
- Excepciones
-
ConcurrentModificationException- Si se detecta que la función de asignación modificó este mapa
-
computeIfPresent
public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Si el valor de la clave especificada está presente y no es nulo, intenta calcular una nueva asignación dada la clave y su valor asignado actual.Si la función de reasignación devuelve
null, se elimina la asignación. Si la función de reasignación en sí misma lanza una excepción (no comprobada), la excepción se vuelve a lanzar y la asignación actual permanece sin cambios.La función de reasignación no debe modificar este mapa durante el cálculo.
Si se detecta que la función de reasignación modifica este mapa durante el cálculo, el método lanzará, sobre una base de mejor esfuerzo,
ConcurrentModificationException。- Specified by:
-
computeIfPresentEn la interfazMap<K,V> - Parámetros
-
key- La clave asociada con el valor especificado -
remappingFunction- Función de reasignación utilizada para calcular el valor - Resultado
- El nuevo valor asociado con la clave especificada, o null si no hay ninguno
- Excepciones
-
ConcurrentModificationException- Si se detecta que la función de reasignación modificó este mapa
-
compute
public V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Intenta calcular una asignación para la clave especificada y su valor asignado actual (si no hay asignación actual,null)。 Por ejemplo, para crear o añadirStringuna asignación de mensajes a valores:(el métodomap.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))merge()es generalmente más fácil de usar para este tipo de fines.)Si la función de reasignación devuelve
null, entonces se elimina la asignación (o permanece ausente si no existía inicialmente). Si la función de reasignación en sí misma lanza una excepción (no comprobada), la excepción se vuelve a lanzar y la asignación actual permanece sin cambios.La función de reasignación no debe modificar este mapa durante el cálculo.
Si se detecta que la función de reasignación modifica la asignación durante el cálculo, el método lanzará en la medida de lo posible
ConcurrentModificationException。- Specified by:
-
computeEn la interfazMap<K,V> - Parámetros
-
key- La clave asociada con el valor especificado -
remappingFunction- Función de reasignación utilizada para calcular el valor - Resultado
- El nuevo valor asociado con la clave especificada, o null si no hay ninguno
- Excepciones
-
ConcurrentModificationException- Si se detecta que la función de reasignación modificó este mapa
-
merge
public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
Si la clave especificada aún no está asociada con un valor o está asociada con null, la asocia con el valor no nulo dado. de lo contrario, reemplaza el valor asignado por el resultado de la función de reasignación dada, o si el resultado esnullentonces se elimina. Cuando se combinan múltiples valores asignados de una clave, este método puede resultar útil. Por ejemplo, para crear o añadirString msga una asignación de valores:map.merge(key, msg, String::concat)Si la función de reasignación devuelve
null, se elimina la asignación. Si la función de reasignación en sí misma lanza una excepción (no comprobada), la excepción se vuelve a lanzar y la asignación actual permanece sin cambios.La función de reasignación no debe modificar este mapa durante el cálculo.
Si se detecta que la función de reasignación modifica este mapa durante el cálculo, el método lanzará, sobre una base de mejor esfuerzo,
ConcurrentModificationException。- Specified by:
-
mergeEn la interfazMap<K,V> - Parámetros
-
key- Clave asociada al valor resultante -
value- Un valor no nulo que se fusionará con el valor existente asociado con la clave o, si no hay un valor existente o hay un valor nulo asociado con la clave, que se asociará con la clave -
remappingFunction- La función de reasignación para volver a calcular un valor, si está presente - Resultado
- El nuevo valor asociado con la clave especificada, o null si no hay ningún valor asociado con la clave
- Excepciones
-
ConcurrentModificationException- Si se detecta que la función de reasignación modificó este mapa
-
-