【发布时间】:2014-01-24 16:30:12
【问题描述】:
我有一个 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,它只复制第一个对象。为什么?
【问题讨论】:
-
显示你的实际代码,数组列表中有什么?设置删除重复条目。因此,如果您有一个列表 {1,1,1},那么集合就是 {1}。
-
看起来
List<MyClass> xxx中的MyClass实例具有相同的哈希码,并且在其equals方法的定义中也相同。 -
我有十磅说你需要在
MyClass上实施equals() -
如果你实现equals,也要实现hashCode。
标签: java collections arraylist set