gpt4 book ai didi

java - 是否有一个忽略 .equals 的 java Set 集合

转载 作者:行者123 更新时间:2023-12-02 13:24:57 25 4
gpt4 key购买 nike

我正在做一些奇怪的事情。我想创建一个 Set,但我想忽略这些对象上的 equals 覆盖,而是想执行 obj1 == obj2 进行 equals 比较(真的)。

想象一下我有几个看起来像这样的对象

public static class BrokenEquals
{
@Override
public int hashCode()
{
return 1;
}


@Override
public boolean equals(Object obj)
{
return true;
}
}

如果我这样做

    Set<Object> objs = new HashSet<>();
objs.add(new BrokenEquals());
objs.add(new BrokenEquals()); // objs.size() == 1

显然,Set 的大小为 1(因为两个对象“相等”)。相反,我希望该集合包含两个不同的对象。

但是,如果我这样做

    BrokenEquals obj = new BrokenEquals();
Set<Object> objs = new HashSet<Object>();
objs.add(obj);
objs.add(obj); // objs.size() == 1

我希望集合的大小为 1;

我无权更改 .equals 方法

我想要这个的原因是我正在用循环遍历对象图。我不想陷入其中。

最佳答案

您可以使用IdentityHashMap并忽略这些值(键将形成一个集合)。

网上也有各种 IdentityHashSet 实现。例如,您可以使用 Guava 和 Sets.newIdentityHashSet :

Set<Object> set = Sets.newIdentityHashSet();
objs.add(obj);
objs.add(obj); // Size will be 1

请注意,我也会尝试以损坏的方式修复实现 equals 的类...

关于java - 是否有一个忽略 .equals 的 java Set 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com