Javaの設定<整数[]> VSの設定<リスト<Integer型>>

甲斐劉:

私が使用するコードを以下しているint[]List<Integer>HashSetの要素として、しかし、彼らは異なる結果を持っています。なぜList<Integer>ハッシュを比較するために使用されるが、配列ではないだろうか?

Set<List<Integer>> set2 = new HashSet();
set2.add(Arrays.asList(1, 2, 3, 4));
System.out.println(set2.contains(Arrays.asList(1, 2, 3, 4)));


int[] arr1 = {1, 2, 3, 4};
int[] arr2 = {1, 2, 3, 4};
Set<int[]> set3 = new HashSet();
set3.add(arr1);
System.out.println(set3.contains(arr2));

出力は、

true
false
GhostCat敬礼モニカC.:

シンプル:配列は等しいので、内容を比較しません。あなたがそれをしたい場合は、使用する必要がありますArrays.equals(array1, array2)(これを参照質問を(自動的に使用する設定を使用しているときはもちろん不可能な、) array1.equals(array2))。

これはarray1.equals()、参照の比較を行っています。言い換えれば、アレイ上のメソッドを使用するときに、あなたが実際に使用を行う==カバーの下に!彼らは、アレイの観点から同じではないので、あなたは、そこに二つの異なる配列を持っています。

一方、リストは要素の比較によって要素を行います!したがって、二つの異なるリストオブジェクトが、リストには、同じコンテンツを持っています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=203529&siteId=1