我怎么说一个对象存在于一个也有一个树集的集合中?
How do I say that an object is present in a Set that also has a treeset?
我有 s 组对象 A
。
Class A {
String text1;
String text2
TreeSet<ClassAA> classAaSet;
@Override
public boolean equals(object b){
}
@Override
public int hashCode(){
}
}
其他class:
Class AA {
String y;
String z;
@Override
public int hashCode() {
return Objects.hash(y,z)
}
@Override
public int compareTo(ClassAA other) {
return y.compareTo(other.y)
}
}
我有一组 A 和一个对象 A
。
我如何Set<A>aSet.contains(A)
?
在内部,因为我有一个树集,它忽略了 equals 实现。
您想创建一组 Class A 的对象,那么您应该覆盖 Class A 中的 equals 和 hashcode() 方法。您已在 class 中添加方法 equals() A 但是您将其定义块保留为空,这等于不覆盖或实现该方法。在最后一行中,您说它忽略了 Equals 实现,但是实现在哪里?它不在那里。问题不清楚。你能解释一下你到底在做什么吗?
如果您发布的代码在可以编译的范围内是正确的,那就更清楚了。总之:
您的 class AA
应满足三个要求:(1) 相等对象应 return 相同 hashCode()
,(2) compareTo()
应与 equals()
一致,并且 (3) compareTo()
和 TreeSet
正常工作,class 应该实现 Comparable<AA>
.
希望大家可以自行添加implements
第(3)条。对于 (2),请查看 Comparable
的文档。最简单的解决方法是重写 equals()
,使 AA
等于另一个具有相同 y
的 AA
。不幸的是,这会破坏 (1),因为当前的 hashCode
方法也依赖于 z
。
因此决定两个 AA
对象相等意味着什么。换句话说,给定 A
中的 classAaSet
和一个 AA
对象,这意味着该集合已经包含这样一个 AA
。它具有相同的 y
就足够了吗?还是应该同时具有相同的 y
和相同的 z
?然后编码 equals()
、hashCode()
和 compareTo()
以反映您的决定。
实际上,我认为 TreeSet
不使用 hashCode()
,因此在肮脏的解决方案中,您可以在不满足 (1) 的情况下生活,甚至根本不覆盖 hashCode()
。如果您的 class 在其他时间用于新上下文,您可能会遇到麻烦,因此我不推荐它。
我有 s 组对象 A
。
Class A {
String text1;
String text2
TreeSet<ClassAA> classAaSet;
@Override
public boolean equals(object b){
}
@Override
public int hashCode(){
}
}
其他class:
Class AA {
String y;
String z;
@Override
public int hashCode() {
return Objects.hash(y,z)
}
@Override
public int compareTo(ClassAA other) {
return y.compareTo(other.y)
}
}
我有一组 A 和一个对象 A
。
我如何Set<A>aSet.contains(A)
?
在内部,因为我有一个树集,它忽略了 equals 实现。
您想创建一组 Class A 的对象,那么您应该覆盖 Class A 中的 equals 和 hashcode() 方法。您已在 class 中添加方法 equals() A 但是您将其定义块保留为空,这等于不覆盖或实现该方法。在最后一行中,您说它忽略了 Equals 实现,但是实现在哪里?它不在那里。问题不清楚。你能解释一下你到底在做什么吗?
如果您发布的代码在可以编译的范围内是正确的,那就更清楚了。总之:
您的 class AA
应满足三个要求:(1) 相等对象应 return 相同 hashCode()
,(2) compareTo()
应与 equals()
一致,并且 (3) compareTo()
和 TreeSet
正常工作,class 应该实现 Comparable<AA>
.
希望大家可以自行添加implements
第(3)条。对于 (2),请查看 Comparable
的文档。最简单的解决方法是重写 equals()
,使 AA
等于另一个具有相同 y
的 AA
。不幸的是,这会破坏 (1),因为当前的 hashCode
方法也依赖于 z
。
因此决定两个 AA
对象相等意味着什么。换句话说,给定 A
中的 classAaSet
和一个 AA
对象,这意味着该集合已经包含这样一个 AA
。它具有相同的 y
就足够了吗?还是应该同时具有相同的 y
和相同的 z
?然后编码 equals()
、hashCode()
和 compareTo()
以反映您的决定。
实际上,我认为 TreeSet
不使用 hashCode()
,因此在肮脏的解决方案中,您可以在不满足 (1) 的情况下生活,甚至根本不覆盖 hashCode()
。如果您的 class 在其他时间用于新上下文,您可能会遇到麻烦,因此我不推荐它。