java - 爪哇集与设置>
- >
问题描述
我有以下代码可以使用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
解决方案
很简单:因为数组 equals 不比较内容。如果你想这样做,你必须使用Arrays.equals(array1, array2)
(见这个问题),这在使用 Set 时当然是不可能的(它将自动使用array1.equals(array2)
)。
那array1.equals()
就是做参考比较。换句话说:在数组上使用该方法时,您实际上是在幕后使用==
!而且那里有两个不同的数组,因此从数组的角度来看它们并不相等。
另一方面,列表进行逐个元素的比较!因此,两个不同的列表对象,但列表具有相同的内容。
推荐阅读
- php - 我想根据数据表的输入数量创建行
- java - IOUtils.toByteArray 正在返回空字节数组
- python - 恢复真实 PSK
- java - 在不同的未知类的多个对象上调用相同的函数(阅读:具有相同返回类型的相同名称的函数)
- javascript - 提交表单后jquery导致缓慢
- svn - SVN:如何获得“下 100 个”修订版
- r - 如何为`flexclust::distEuclidean`指定参数`centers`?
- java - SQLite的简单select语句耗时2秒以上
- virtualization - WinNAT服务启动失败
- ruby-on-rails - Ruby on Rails - 从 has_and_belongs_to 访问子关系