2016-09-19 2 views
0

int[] i={1,2,3}.equals int i1[]={1,2,3}と異なるhashcode()があります。詳細を調べると、ネイティブコードhashCode()が配列ハッシュコードの実装方法を知りたいと考えています。Javaで配列hashcode()がどのように計算されるか。配列の場合のhashcode()の実装

+1

おそらく、[java.util.Arrays.equals](https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#equals-int: A-int:A-) –

+0

'hashCode'は、これら2つのオブジェクトが異なるメモリのチャンクに格納されているため、異なる値を返します。 [この回答を参照](/ a/13387787/2487517) – Tibrogargan

答えて

1

System.out.println(i.hashCode()); // return 865113938 
System.out.println(i1.hashCode()); // return 1442407170 

Arrays.hashCode方法は、指定された配列の内容に二つのコンテンツとして基づいてハッシュコードを返し、オブジェクトのポインタ値であるため、ハッシュコードによって返された整数は、両方の行列の異なります配列は同じ値

System.out.println(Arrays.hashCode(i)); // return 30817 
System.out.println(Arrays.hashCode(i1));// return 30817 

等しい復帰していて、二つの配列を比較したい場合はArrays.equals

を使用することができます
+0

デフォルトのハッシュコードは本質的に "オブジェクトポインタ値"ではありません。オブジェクトは動き回りますが、ハッシュコードは変更されません。いくつかの一般的なJVMでは、オブジェクトのアドレスの一部がハッシュを生成するために使用されます。これは "オブジェクトポインタ値"と同じではありません。ハッシュコードがオブジェクトへのポインタのレイヤの1つのビットパターンと一致する場合でも、ハッシュをポインタ値と考えることは有用ではありません。 –

+0

私はこれを探していませんでした。配列が以下のコードを使用していることを知っています。ここでは、あなたのコードで配列hashcodeを使用しています。どのように通常の配列のハッシュコードがutlのものではなく計算されるのか理解したいと思います。public static int hashCode(int a []){ if(a == null) return 0; int result = 1; (int要素:a) 結果= 31 *結果+要素; 返品結果; } –

関連する問題