Java 列表的大小在转换为集合时发生更改
我有一个ArrayList:Java 列表的大小在转换为集合时发生更改,java,collections,arraylist,set,Java,Collections,Arraylist,Set,我有一个ArrayList: List<MyClass> xxx = new ArrayList<MyClass>(functionThatGetsAList()); 或者: Set<MyClass> yyy = new HashSet<MyClass>(); yyy.addAll(xxx); Set yyy=new HashSet(); yyy.addAll(xxx); 在这两种情况下,yyy.size()都是1,它只复制第一个对象。为什么
List<MyClass> xxx = new ArrayList<MyClass>(functionThatGetsAList());
或者:
Set<MyClass> yyy = new HashSet<MyClass>();
yyy.addAll(xxx);
Set yyy=new HashSet();
yyy.addAll(xxx);
在这两种情况下,
yyy.size()
都是1,它只复制第一个对象。为什么?来自
布尔加法(E)
如果指定的元素尚未存在,则将其添加到此集合
尝试将列表中的元素添加到循环中的集合中
不设置。添加(l);每次迭代返回true?如果不是,我认为可以安全地假设您试图添加到集合中的内容与hashcode确定的内容相同。如果是这种情况,则需要重写hashcode()。
HashSet
依赖于对象中的hashcode()
方法。如果需要哈希代码,则需要重写此方法。重写hashCode()
时,还必须重写equals()
。请参见显示实际代码,数组列表中有什么?让我们删除重复的条目。因此,如果你有一个列表{1,1,1},那么这个集合就是{1}。看起来你的list xxx
中的MyClass
的实例有相同的散列码,并且根据它的equals
方法的定义是相同的。我有10英镑,说如果你实现equals,你需要在MyClass
上实现equals()
,还要实现hashCode。
Set<MyClass> yyy = new HashSet<MyClass>();
yyy.addAll(xxx);