程序的一部分如下:
System.out.println(labelInADT); System.out.println(intervalSet.labels()); System.out.println(intervalSet.labels().contains(labelInADT));
其中labels返回一个HashSet。
我们惊讶地发现输出如下:
lalala0
[lalala0, lololo0]
false
这说明intervalSet.labels().contains()不认为labelInADT是其中的成员。但是在程序中,我们已经重载过equals()方法。于是遇到了问题。
解决办法:注意到HashSet也会利用hashCode方法比较成员,所以需要重写hashCode方法。
@Override public int hashCode() { return Objects.hash(label,id); }
添加之后问题迎刃而解。