【发布时间】:2020-12-28 09:46:45
【问题描述】:
谁能向我解释一下 Set 在 java 中是如何工作的?代码如下:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
Set<List<Integer>> set = new HashSet<>();
set.add(list);
set.add(list1);
System.out.println(set);
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
int[] arr1 = new int[3];
arr1[0] = 1;
arr1[1] = 2;
arr1[2] = 3;
Set<int[]> set1 = new HashSet<>();
set1.add(arr);
set1.add(arr1);
System.out.println(set1);
输出: [[1, 2, 3]] [[I@7852e922,[I@6d06d69c]
我的问题是 Set 如何区分 ArrayList/List?但不能区分数组吗?我认为两者都是通过引用传递并且都是对象吗?
【问题讨论】:
-
区别在于他们如何定义hashCode和equals。
-
补充说明,Java 中的数组不会覆盖
Object.hashCode和Object.equals,因此只考虑完全相同的数组实例与其自身相等。 -
简明扼要地说:如果
!A.equals(B)可以区分A和B
标签: java arrays list set hashset