Esto es impar. Un compañero de trabajo preguntó sobre la implementación de myArray.hashCode() en java. Pensé que lo sabía, pero luego hice algunas pruebas. Verifica el código a continuación. La extraña idea que noté es que cuando escribí el primer sistema, los resultados fueron diferentes. Tenga en cuenta que es casi como si estuviera informando una dirección de memoria y modificando la clase que movió la dirección o algo así. Solo pensé en compartir.Implementación de Java Array HashCode
int[] foo = new int[100000];
java.util.Random rand = new java.util.Random();
for(int a = 0; a < foo.length; a++) foo[a] = rand.nextInt();
int[] bar = new int[100000];
int[] baz = new int[100000];
int[] bax = new int[100000];
for(int a = 0; a < foo.length; a++) bar[a] = baz[a] = bax[a] = foo[a];
System.out.println(foo.hashCode() + " ----- " + bar.hashCode() + " ----- " + baz.hashCode() + " ----- " + bax.hashCode());
// returns 4097744 ----- 328041 ----- 2083945 ----- 2438296
// Consistently unless you modify the class. Very weird
// Before adding the comments below it returned this:
// 4177328 ----- 4097744 ----- 328041 ----- 2083945
System.out.println("Equal ?? " +
(java.util.Arrays.equals(foo, bar) && java.util.Arrays.equals(bar, baz) &&
java.util.Arrays.equals(baz, bax) && java.util.Arrays.equals(foo, bax)));
Gracias por esta respuesta, pero ¿Por qué java.lang.Array no anula los métodos hashCode (y toString) de forma predeterminada? ¿Hay alguna buena razón? –
Porque hashCode necesita ser rápido para ser útil (ya que se usa principalmente para evitar una llamada costosa de .equals), e incluso un valor reducido de hashCode en una matriz podría ser muy lento. Un hashCode que es básicamente aleatorio no duele, simplemente no proporciona ninguna ventaja. Mal menor. – Torque