módulo  java.base
paquete  java.util

Class 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 enHashMapla 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 enHashMapuna 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 usarCollections.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 propiosremovemé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 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
      void clear()
      Elimina todas las asignaciones de este mapa.
      Object clone()
      Devuelve esteHashMapCopia superficial de la instancia: las claves y los valores en sí mismos no se clonan.
      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 )。
      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 utilizando la función de asignación dada e insertarlo en este mapa, a menos quenull 。
      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.
      boolean containsKey​(Object key)
      Si este mapa contiene una asignación para la clave especificada, devuelvetrue 。
      boolean containsValue​(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.
      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 。
      boolean isEmpty()
      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.
      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.
      V put​(K key, V value)
      Asocia el valor especificado con la clave especificada en este mapa.
      void putAll​(Map<? extends K,​? extends V> m)
      Copia todas las asignaciones del mapa especificado a este mapa.
      V remove​(Object key)
      Elimina la asignación de la clave especificada de este mapa, si existe.
      int size()
      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.
    • 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.
        Specified by:
        sizeEn la interfazMap<K,​V>
        Sobrescribe:
        sizeClaseAbstractMap<K,​V>
        Resultado
        Número de asignaciones de clave-valor en este mapa
      • isEmpty

        public boolean isEmpty()
        Si este mapa no contiene ninguna asignación de clave-valor, devuelvetrue 。
        Specified by:
        isEmptyEn la interfazMap<K,​V>
        Sobrescribe:
        isEmptyClaseAbstractMap<K,​V>
        Resultado
        trueSi este mapa no contiene una asignación clave-valor
      • 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 clavekal 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 retornonull no 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 asociadokey, onullsi no hay ninguna asignaciónkey 。 (A nullel 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 haykeyasignación, entonces conkeyonullel valor anterior asociado. (A nullel 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.
        Specified by:
        clearEn la interfazMap<K,​V>
        Sobrescribe:
        clearEn el curso.AbstractMap<K,​V>
      • 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.
        Specified by:
        keySetEn la interfazMap<K,​V>
        Sobrescribe:
        keySetEn la claseAbstractMap<K,​V>
        Resultado
        Vista de conjunto de las claves contenidas en este mapa
      • 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.
        Specified by:
        valuesEn la interfazMap<K,​V>
        Sobrescribe:
        valuesen la claseAbstractMap<K,​V>
        Resultado
        Vista de los valores contenidos en este mapa
      • 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.
        Specified by:
        entrySetEn la interfazMap<K,​V>
        Resultado
        Una vista de conjunto de las asignaciones contenidas en este mapa
      • 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 devuelvenull, 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 multivalorMap<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 devuelvenull, 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:
           map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) 
        (el métodomerge()es generalmente más fácil de usar para este tipo de fines.)

        Si la función de reasignación devuelvenull, 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 posibleConcurrentModificationException 。

        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 devuelvenull, 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
      • clone

        public Object clone()
        Devuelve esteHashMapCopia superficial de la instancia: las claves y los valores en sí mismos no se clonan.
        Sobrescribe:
        cloneClaseAbstractMap<K,​V>
        Resultado
        Copia superficial de este mapa
        Véase también:
        Cloneable