甲斐劉:
私が使用するコードを以下している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()
、参照の比較を行っています。言い換えれば、アレイ上のメソッドを使用するときに、あなたが実際に使用を行う==
カバーの下に!彼らは、アレイの観点から同じではないので、あなたは、そこに二つの異なる配列を持っています。
一方、リストは要素の比較によって要素を行います!したがって、二つの異なるリストオブジェクトが、リストには、同じコンテンツを持っています。