Set<ArrayList<Integer>> hs = new HashSet<ArrayList<Integer>>();
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
hs.add(arr);
ArrayList<Integer> arr1 = new ArrayList<Integer>();
arr1.add(4);
arr1.add(3);
arr1.add(2);
arr1.add(1);
hs.add(arr1);
System.out.println(hs.size());
我得到的输出是2.我想得到1,因为两个arrayLists都有相同的元素。我怎样才能做到这一点?
答案 0 :(得分:3)
在第二个块中,创建arr1
后,将数字1到3添加到arr 再次。显然,包含8个元素的ArrayList
不等于空ArrayList
,因此HashSet
中有两个成员。如果您修改代码以将相同的元素添加到arr1
,则会获得大小为1的HashSet
。
答案 1 :(得分:0)
在您粘贴的代码中,您将1,2,3和4添加到第一个列表(arr
)两次,并且不向第二个列表添加任何内容(arr1
)。因此arr1.equals(arr)
将是错误的。
修复代码中的拼写错误,以便arr1
包含与arr
相同的元素,您将实现目标。
答案 2 :(得分:-3)
即使内容相同,两个arraylists也是不同的对象。您必定会在集合中看到2个元素。
就像有两个名字完全相同的员工一样。
不确定是否可以为arraylists实现equals方法。