2016-04-03 5 views
0

Ich habe gelesen, dass für die Berechnung der Hashcode für mehrdimensionale Array muss Arrays.deepHashCode() Methode anstelle von Arrays.hashCode() Methode, aber ich verstehe nicht wirklich die technische Grund dahinter. Könnte mir bitte jemand das erklären?Technische Gründe hinter der Verwendung von Arrays.deepHashCode() bei der Berechnung von Hashcode für mehrdimensionale Array

Object[][] one = { 
     {1, 2, 3}, 
     {11, 22, 33} 
    }; 
    int two = Arrays.deepHashCode(one); 
    int three = Arrays.hashCode(one); 
    System.out.println("two " + two); 
    System.out.println("three " + three); 

Ergebnis:

two 997365 
three 312355675 

Antwort

3

Der technische Grund ist, dass, wenn Sie einfach Sie hashCode() auf dem Array aufrufen, erhalten Sie eine „Identität“ Hash-Code erhalten; ein Hashcode, der die in dem Array gespeicherten Werte ignoriert. Somit wird

Object[][] one = { 
    {1, 2, 3}, 
    {11, 22, 33} 
}; 

Object[][] won = { 
    {1, 2, 3}, 
    {11, 22, 33} 
}; 

println(won.hashCode() == one.hashCode()); 

wird false drucken. In typischen Fällen möchten Sie, dass die Hash-Codes one und won gleich sind. Um das zu erreichen, müssen Sie die Hash-Code-Berechnung verwenden, um die Werte aller Elemente des Arrays einzubeziehen.

+0

Vielen Dank für Ihre Hilfe. Wenn es Ihnen nichts ausmacht, können Sie bitte einige gute Ressourcen zum Erlernen von Hashcode empfehlen? Nochmals vielen Dank für Ihre Hilfe – Thor

+1

Versuchen Sie ein gutes Buch über Java Data Structures and Algorithms. Ich habe keine spezifischen Empfehlungen. –

Verwandte Themen