首页 > 解决方案 > 爪哇集与设置>

问题描述

我有以下代码可以使用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

标签: javaarrayslistset

解决方案


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

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

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


推荐阅读