Come per la mia comprensione della ArrayList
, la capacità di default è 10 e quando cresce al di là di 10, verrà creato un nuovo oggetto di nuova capacità e così via ..Perché il hashCode() di un cambiamento ArrayList ogni volta che si aggiunge un nuovo elemento?
Così per curiosità, ho digitato seguente programma per controllare hashcode()
per ArrayList
oggetto:
public class TestCoreJava {
public static void main(String [] args){
ArrayList al = new ArrayList();
for(int i=0;i<15;i++){
al.add("Temp"+i);
System.out.println("Hashcode for "+i+" element "+al.hashCode());
}
}
}
Secondo scenario di cui sopra, quando non sono la creazione di capacità iniziale per ArrayList
il default sarebbe 10. Così, mentre l'aggiunta di elementi 11, si creerà un nuovo oggetto e aumentare la capacità di ArrayList
.
Quando si stampa l'hashcode per l'oggetto ArrayList
, ogni volta viene assegnato un nuovo hashcode()
.
Segue la O/P:
Hashcode for 0 element 80692955
Hashcode for 1 element -1712792766
Hashcode for 2 element -1476275268
Hashcode for 3 element 1560799875
Hashcode for 4 element 1220848797
Hashcode for 5 element -727700028
Hashcode for 6 element -1003171458
Hashcode for 7 element -952851195
Hashcode for 8 element 607076959
Hashcode for 9 element 1720209478
Hashcode for 10 element -6600307
Hashcode for 11 element -1998096089
Hashcode for 12 element 690044110
Hashcode for 13 element -1876955640
Hashcode for 14 element 150430735
Secondo il concetto di capacità predefinita, al 10 elemento avrebbe dovuto stampato stesso hashcode()
come nessun nuovo oggetto deve essere creato fino a quel punto, ma è non è il caso.
'hashCode()' è legato a 'equals()', che indica che il 2 liste con elementi diversi ma la stessa capacità devono restituire diversi codici hash (che fanno, se si guardano le fonti) – Thomas
Possibile duplicato [Quali problemi devono essere considerati quando si esegue l'override uguale a hashCode in Java?] (Http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in- java) – Raedwald