使用java比较两个具有Set inside的实体

使用java比较两个具有Set inside的实体,java,set,compare,hashcode,Java,Set,Compare,Hashcode,我有一个内部设置的实体 class A { public Set<B> b; } A类{ 公共集合b; } 当我试图比较两个实体A时,我遇到了一个问题,即如何将集合b与集合b字段进行比较。hashCode和equals会自动重写,但它们的比较不正确。我该怎么办?如何在不依赖实现的情况下正确比较两个集合?通常,当集合的条目相等时,集合也相等: Set<String> a = new HashSet<>(Arrays.asList("a", "b", "c")

我有一个内部设置的实体

class A {
public Set<B> b;
}
A类{
公共集合b;
}

当我试图比较两个实体A时,我遇到了一个问题,即如何将集合b与集合b字段进行比较。hashCode和equals会自动重写,但它们的比较不正确。我该怎么办?如何在不依赖实现的情况下正确比较两个集合?

通常,当集合的条目相等时,集合也相等:

Set<String> a = new HashSet<>(Arrays.asList("a", "b", "c"));
Set<String> b = new HashSet<>(Arrays.asList("c", "b", "a"));

System.out.println(a.equals(b)); //true;
Set a=新的HashSet(Arrays.asList(“a”、“b”、“c”);
Set b=新的HashSet(Arrays.asList(“c”、“b”、“a”);
系统输出println(a等于(b))//是的;

所以这一切都取决于类B的equals()。你能给出这个实现吗?

通常,当集合的条目相等时,集合也相等:

Set<String> a = new HashSet<>(Arrays.asList("a", "b", "c"));
Set<String> b = new HashSet<>(Arrays.asList("c", "b", "a"));

System.out.println(a.equals(b)); //true;
Set a=新的HashSet(Arrays.asList(“a”、“b”、“c”);
Set b=新的HashSet(Arrays.asList(“c”、“b”、“a”);
系统输出println(a等于(b))//是的;

因此,它将完全依赖于类B的equals()。您能给出该实现吗?

根据java文档,equals方法很好,所以我想知道它有什么问题

将指定对象与此集合进行相等性比较。如果给定对象也是一个集合,两个集合的大小相同,并且给定集合的每个成员都包含在此集合中,则返回true。这确保equals方法在Set接口的不同实现中正常工作。 这个实现首先检查指定的对象是否是这个集合;如果是,则返回true。然后,它检查指定对象是否是大小与该集合大小相同的集合;如果不是,则返回false。如果是,则返回containsAll((Collection)o)


你有没有一个具体的例子来说明什么地方出了问题,即没有工作?

根据java文档,equals方法很好,所以我想知道它出了什么问题

将指定对象与此集合进行相等性比较。如果给定对象也是一个集合,两个集合的大小相同,并且给定集合的每个成员都包含在此集合中,则返回true。这确保equals方法在Set接口的不同实现中正常工作。 这个实现首先检查指定的对象是否是这个集合;如果是,则返回true。然后,它检查指定对象是否是大小与该集合大小相同的集合;如果不是,则返回false。如果是,则返回containsAll((Collection)o)


您是否有一个具体的例子说明出现了什么问题,即不工作?

如何“自动覆盖”
hashCode
等于?你能举个例子吗?@FlorianSchaetz我的意思是我已经生成了它们。
hashCode
如何“自动覆盖”?你能举个例子吗?@FlorianSchaetz我的意思是我已经生成了它们。