我想在集合中添加重复元素,我该怎么做?我必须覆盖哪些方法。
public final class AddDupliacateElementInSet
{
public static void main(String[] args)
{
Set<Integer> set =new HashSet<>();
set.add(1);
set.add(1);
set.add(3);
set.add(4);
set.add(5);
set.add(6);
set.forEach(s->System.out.println(s));
}
}
最佳答案
正如社区在评论中指出的那样,Set
并不意味着存储重复值。但是出于“面试问题”或“您无法更改的库代码”等原因,您可以通过覆盖 equals
以始终返回 false
来强制它存储重复项。
对于原始类型或其他不受您控制的对象,您可以围绕您的值对象创建一个包装类,并使其 equals()
始终返回 false
:
public class UnequalWrapper {
private int value;
//...constructor, getter, setter
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return Objects.hashCode(value);
}
}
然后使用它:
public static void main(String[] args) {
UnequalWrapper a = new UnequalWrapper(1);
UnequalWrapper b = new UnequalWrapper(2);
UnequalWrapper c = new UnequalWrapper(1);
Set<UnequalWrapper> set = Set.of(a, b, c);
set.forEach(wrapper -> System.out.println(wrapper.getValue()));
}
输出:
1
2
1
但同样,不推荐,不要在家里尝试!
编辑:
如果您使用包装器,则可以省略 equals()
和 hashcode()
。这是因为 Object
类的方法将检查对象引用,如果您每次都创建一个新的包装器实例,这将有所不同。
关于java - 如何在 Set 中添加重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660570/