我的问题是为什么即使在自定义对象中实现哈希码和等于之后,为什么ArrayList也不会删除重复项。
例如:我有一个以id和name为属性的雇员对象,同时我也覆盖了哈希码&等于
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (this.id != other.id)
return false;
return true;
}
答案 0 :(得分:1)
因为List
可以包含重复的元素。如果您不希望这样做,可以改用HashSet
。
答案 1 :(得分:1)
答案 2 :(得分:1)
列表并不意味着唯一值。 java.util.List
的javadocs中明确记录了这一点:
与集合不同,列表通常允许重复的元素。更正式地讲,列表通常允许成对的元素e1和e2,使得e1.equals(e2),并且如果它们完全允许空元素,则它们通常允许多个空元素。并非不可想象,有人希望通过在用户尝试插入运行时异常时抛出运行时异常来实现禁止重复的列表,但我们希望这种用法很少见。
如果需要唯一值的集合,请使用Set
(您可能希望使用HashSet
)