Tengo un List
tiempo extra que será cambiado y quiero guardarlo con un valor de tiempo y comprobar si el mismo List
aparece de nuevo.
ex:
[1, 2, 3] is same as [1, 2, 3]
Pensé que ya que List<Integer>
se pasa por el valor de referencia, por lo que creo que la clave debe ser Stringified para ser utilizado.
por ejemplo:
Map<String, Integer> = new HashMap<>()
(key:"stringified key", value: .....)
Pero me parece que Map<List<Integer>, Integer> map = new HashMap<>()
también funciona, pero no sé por qué funciona, ya que la clave debe ser referencia a la misma lista, no importa lo que los valores en la lista cambian.
por ejemplo:
(key:[reference to key], value: .....)
List<Integer> testList = new ArrayList<>();
testList.add(0);
map.put(testList, 0);
testList.set(0, 1);
if(map.containsKey(testList))System.out.println("duplicate");
else System.out.println("unique");
El resultado anterior se imprimirá "único" pero creo que debe imprimir "duplicado". ¿Por qué el resultado anterior muestra esto?
Desde interanual cambió el contenido del ArrayList
valor del ArrayList
hashCode
que también cambió.
List<Integer> l = new ArrayList<>();
l.add(0);
System.out.println(l.hashCode()); // 31
l.set(0, 1);
System.out.println(l.hashCode()); // 32
Esto va en contra del principio de HashMap
que el hashCode
se utiliza para encontrar la ubicación del elemento. Objetos que se utilizan para las HashMap
claves debe tener constante hashCode
, de lo contrario la HashMap
lógica de búsqueda no funcionará.