【发布时间】:2014-01-20 15:03:44
【问题描述】:
所以,我用 Java 编写了这段代码:
import java.util.HashSet;
class Interval{
long from;
long to;
public Interval(long from, long to) {
this.from = from;
this.to = to;
}
public boolean equals(Interval other) {
return from == other.from && to == other.to;
}
}
public class Test {
public static void main(String[] args) {
HashSet<Interval> mySet = new HashSet<Interval>();
mySet.add(new Interval(1,2));
mySet.add(new Interval(1,2));
for(Interval in : mySet) {
System.out.println(in.from + " " + in.to);
}
}
}
问题是该集合无法识别已经存在从 1 到 2 的区间。我定义了函数 equals,但它仍然不起作用。我尝试实现 Comparable 接口并重载 compareTo 函数,但还是没有。有人可以告诉我如何解决这个问题吗?
谢谢!
【问题讨论】:
-
在您的
Interval类中覆盖并实现自定义hashCode()方法。 -
你需要在你的类中重写equals和hashcode
-
你的
equals方法也应该是public boolean equals(Object some),否则,你重载它而不是@Overrideing它。 -
您必须提供与您的平等定义相匹配的
equals(Object)和hashCode()实现。 -
这是
equals(Object obj),而不是equals(Interval other)!