keys - recorrer hashmap java




¿Qué sucede cuando una clave duplicada se coloca en un HashMap? (7)

A tu pregunta si el mapa era como un cubo: no.

Es como una lista con pares name=value mientras que el name no necesita ser una cadena (aunque puede serlo).

Para obtener un elemento, debe pasar su clave al método get (), que le proporciona el objeto asignado a cambio.

Y un mapa Hash significa que si está intentando recuperar su objeto utilizando el método get, no comparará el objeto real con el que proporcionó, ya que tendría que recorrer su lista y comparar () la clave. Usted proporcionó con el elemento actual.

Esto sería ineficiente. En cambio, no importa en qué consiste su objeto, calcula un llamado código de hash de ambos objetos y los compara. Es más fácil comparar dos int s en lugar de dos objetos completos (posiblemente profundamente complejos). Puede imaginar el código hash como un resumen con una longitud predefinida (int), por lo tanto, no es único y tiene colisiones. Encontrará las reglas para el código hash en la documentación en la que he insertado el enlace.

Si desea saber más acerca de esto, puede consultar los artículos en javapractices.com y technofundo.com

Saludos

Si paso la misma clave varias veces al método put HashMap , ¿qué sucede con el valor original? ¿Y si incluso el valor se repite? No encontré ninguna documentación sobre esto.

Caso 1: Valores sobrescritos para una clave

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));

surely not one obtengamos surely not one .

Caso 2: valor duplicado

Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));

Conseguimos one .

¿Pero qué pasa con los otros valores? Estaba enseñando conceptos básicos a un estudiante y me preguntaron esto. ¿El Map como un cubo donde se hace referencia al último valor (pero en la memoria)?


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.



Por definición, el comando put reemplaza el valor anterior asociado con la clave dada en el mapa (conceptualmente como una operación de indexación de matriz para tipos primitivos).

El mapa simplemente cae su referencia al valor. Si nada más contiene una referencia al objeto, ese objeto se vuelve elegible para la recolección de basura. Además, Java devuelve cualquier valor anterior asociado con la clave dada (o null si no está presente), por lo que puede determinar qué había allí y mantener una referencia si es necesario.

Más información aquí: HashMap Doc


Sí, esto significa que todas las 1 teclas con valor se sobrescriben con el último valor agregado y aquí se agrega "seguramente no una", por lo que solo se mostrará "seguramente no una".

Incluso si está intentando mostrar con un bucle, también mostrará solo una clave y un valor que tienen la misma clave.


Siempre he usado

HashMap<String, ArrayList<String>> hashy = new HashMap<String, ArrayList<String>>();

Si quisiera aplicar varias cosas a una clave de identificación.

public void MultiHash(){
    HashMap<String, ArrayList<String>> hashy = new HashMap<String, ArrayList<String>>();
    String key = "Your key";

    ArrayList<String> yourarraylist = hashy.get(key);

    for(String valuessaved2key : yourarraylist){
        System.out.println(valuessaved2key);
    }

}

¡Siempre podrías hacer algo como esto y crearte un laberinto!

public void LOOK_AT_ALL_THESE_HASHMAPS(){
    HashMap<String, HashMap<String, HashMap<String, HashMap<String, String>>>> theultimatehashmap = new HashMap <String, HashMap<String, HashMap<String, HashMap<String, String>>>>();
    String ballsdeep_into_the_hashmap = theultimatehashmap.get("firststring").get("secondstring").get("thirdstring").get("forthstring");
}

         HashMap<Emp, Emp> empHashMap = new HashMap<Emp, Emp>();

         empHashMap.put(new Emp(1), new Emp(1));
         empHashMap.put(new Emp(1), new Emp(1));
         empHashMap.put(new Emp(1), new Emp());
         empHashMap.put(new Emp(1), new Emp());
         System.out.println(empHashMap.size());
    }
}

class Emp{
    public Emp(){   
    }
    public Emp(int id){
        this.id = id;
    }
    public int id;
    @Override
    public boolean equals(Object obj) {
        return this.id == ((Emp)obj).id;
    }

    @Override
    public int hashCode() {
        return id;
    }
}


OUTPUT : is 1

El mapa hash de medios no permitirá duplicados, si ha reemplazado correctamente los métodos equals y hashCode ().

HashSet también usa HashMap internamente, consulte el documento de origen

public class HashSet{
public HashSet() {
        map = new HashMap<>();
    }
}




hashtable