我有以下代码将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
答案 0 :(得分:5)
简单:因为数组等于不比较内容。如果要执行此操作,则必须使用Arrays.equals(array1, array2)
(请参阅此question),使用Set(它将自动使用array1.equals(array2)
)时当然是不可能的。< / p>
array1.equals()
正在进行参考比较。换句话说:在数组上使用方法时,实际上实际上是在幕后使用==
!而且那里有两个不同的数组,因此从数组角度看它们是不相等的。
另一方面,列表按元素进行元素比较!因此,两个不同的列表对象但列表具有相等的内容。