【问题标题】:java Set<int[]> vs Set<List<Integer>>java Set<int[]> vs Set<List<Integer>>
【发布时间】:2018-12-16 11:54:26
【问题描述】:

我有以下代码使用 int[]List&lt;Integer&gt; 作为 hashset 元素,但是,它们有不同的结果。为什么List&lt;Integer&gt;可以用来比较hash,而不是数组?

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

【问题讨论】:

    标签: java arrays list set


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-05-22
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      相关资源
      最近更新 更多