2016-04-03 16 views
0

Çok boyutlu dizi için hashcode hesaplamak içinyönteminin yerine Arrays.deepHashCode() yönteminin kullanılması gerektiğini okudum, ama gerçekten teknik olarak anlamadım arkasındaki sebep. Birisi bana açıklayabilir mi lütfen?Çokboyutlu dizi için hashcode hesaplanırken Arrays.deepHashCode() kullanımının arkasındaki teknik nedenler

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); 

Sonuç:

two 997365 
three 312355675 

cevap

3

teknik sebebi basitçe size dizisinde hashCode() çağırırsanız, bir "kimlik" karma kodunun alacak olmasıdır; yani dizide saklanan değerleri yok sayan bir hash kodu. Böylece

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

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

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

false yazdırılır. Tipik durumlarda, one ve won için karma kodlar eşit olmasını istersiniz. Bunu elde etmek için, dizinin tüm öğelerinin değerlerini dahil etmek için karma kod hesaplamasına ihtiyacınız vardır.

+0

Yardımlarınız için çok teşekkür ederim. Eğer sakıncası yoksa, hashcode'u öğrenmek için bazı iyi kaynaklar önerebilir misiniz? Yardımınız için tekrar teşekkürler – Thor

+1

Java Veri Yapıları ve Algoritmaları hakkında iyi bir kitap deneyin. Belli bir tavsiyem yok. –

İlgili konular