mejor manera de detectar HashMap contiene la misma lista o no

Jason:

Tengo un Listtiempo extra que será cambiado y quiero guardarlo con un valor de tiempo y comprobar si el mismo Listaparece 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?

Charles Dowbecki:

Desde interanual cambió el contenido del ArrayListvalor del ArrayList hashCodeque 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 HashMapque el hashCodese utiliza para encontrar la ubicación del elemento. Objetos que se utilizan para las HashMapclaves debe tener constante hashCode, de lo contrario la HashMaplógica de búsqueda no funcionará.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=201415&siteId=1
Recomendado
Clasificación