Jak na moje rozumienie ArrayList
zdolność domyślnym jest 10, a kiedy rośnie ponad 10, będzie tworzyć nowy obiekt z nowych zdolności i tak dalej ..Dlaczego parametr hashCode() obiektu ArrayList zmienia się za każdym razem, gdy dodajesz nowy element?
tak z ciekawości wpisałem następujący program do sprawdzenia hashcode()
dla ArrayList
obiektu:
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());
}
}
}
Według powyższej sytuacji, kiedy nie mam możliwości ustawienia początkowe dla ArrayList
domyślnym będzie 10. Więc dodając 11th elementu, stworzy nowy obiekt i zwiększenie zdolności do ArrayList
.
Po wydrukowaniu kodu skrótu dla obiektu ArrayList
za każdym razem nadaje nowy numer hashcode()
.
Poniżej 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
Według koncepcji domyślnej pojemności do 10 elementu powinien on wydrukowany samo hashcode()
jak nie potrzebuje nowy obiekt ma zostać utworzony do tego momentu, ale jest nie w tym przypadku.
'hashCode()' jest przywiązany do 'równych()', która wskazuje, że 2 Listy z różnych elementów, ale o tej samej pojemności powinien zwracać różne kody hash (co zrobić, jeśli spojrzeć na źródłach) – Thomas
Możliwy duplikat [Jakie problemy należy wziąć pod uwagę, gdy nadpisujesz equals i hashCode w Javie?] (Http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in- java) – Raedwald