我有一个ArrayList:

List<MyClass> xxx = new ArrayList<MyClass>(functionThatGetsAList());


当我测试xxx.size()时,我得到3,这是正确的。然后我尝试投射:

Set<MyClass> yyy = new HashSet<MyClass>(xxx);


或者:

Set<MyClass> yyy = new HashSet<MyClass>();
yyy.addAll(xxx);


在这两种情况下,yyy.size()均为1,并且仅复制第一个对象。为什么?

最佳答案

HashSet的文档中


布尔值add(E e)
如果指定的元素尚不存在,则将其添加到该集合中。


尝试将列表中的那些元素循环添加到集合中。

确实set.add(l);每次迭代都返回true吗?如果没有,我认为可以安全地假定您要添加到集合中的东西与哈希码确定的东西相同。在这种情况下,您将需要覆盖hashcode()。

10-05 23:34
查看更多