java Set <int []> vs Set <List <Integer >>

Kai*_*Liu 3 java arrays list set

我有以下代码使用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));
Run Code Online (Sandbox Code Playgroud)

输出是

true
false
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 5

简单:因为数组等于不比较内容.如果你想这样做,你必须使用Arrays.equals(array1, array2)(见这个问题),当使用Set(它将自动使用array1.equals(array2))时当然是不可能的.

array1.equals()是做参考比较.换句话说:在数组上使用方法时,实际上你可以使用==它!而且你有两个不同的数组,所以从数组的角度来看它们并不相同.

另一方面,列表按元素比较进行元素分析!因此,两个不同的列表对象但列表具有相同的内容.