java Set <int []>与Set <list <integer >>

时间:2018-07-08 17:56:04

标签: java arrays list set

我有以下代码将int[]List<Integer>用作哈希集元素,但是,它们具有不同的结果。为什么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

1 个答案:

答案 0 :(得分:5)

简单:因为数组等于不比较内容。如果要执行此操作,则必须使用Arrays.equals(array1, array2)(请参阅此question),使用Set(它将自动使用array1.equals(array2))时当然是不可能的。< / p>

array1.equals()正在进行参考比较。换句话说:在数组上使用方法时,实际上实际上是在幕后使用==!而且那里有两个不同的数组,因此从数组角度看它们是不相等的。

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

相关问题