Questo è dispari. Un collega ha chiesto informazioni sull'implementazione di myArray.hashCode() in java. Pensavo di saperlo, ma poi ho fatto alcuni test. Controlla il codice qui sotto. La cosa strana che ho notato è che quando ho scritto il primo sys i risultati erano diversi. Nota che è quasi come se stesse riportando un indirizzo di memoria e modificando la classe spostato l'indirizzo o qualcosa del genere. Ho pensato di condividerlo.Implementazione HashCode dell'array Java
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)));
Grazie per questa risposta, ma perché java.lang.Array non sovrascrive i metodi hashCode (e toString) per impostazione predefinita? C'è qualche buona ragione? –
Perché hashCode deve essere veloce per essere utile (dato che è usato principalmente per prevenire una costosa chiamata di .equals), e persino un valore minimo hashCode su un array potrebbe potenzialmente essere molto lento. Un hashCode che è fondamentalmente casuale non fa male, non fornisce alcun vantaggio. Minore di due mali. – Torque