次の単純な Rectangle クラスがあります。2 つの長方形の高さと幅が同じ場合、それらは等しく、同じハッシュコードを持ちます。hashSet に新しい四角形を追加しました。
Set<Rectangle> set = new HashSet<Rectangle>();
set.add(new Rectangle(3,3));
高さと幅が同じ新しい長方形で contains を呼び出そうとすると、false が返されます。
set.contains(new Rectangle(3,3))
false を返します。理由がわかりません。何か案は?
public class Rectangle implements Comparable<Rectangle> {
final int height, width, area, minimumEdge, maximumEdge;
public Rectangle(int height, int width) {
this.height = height;
this.width = width;
area = height * width;
maximumEdge = height > width ? height : width;
minimumEdge = height < width ? height : width;
}
public int compareTo(Rectangle rect2) {
if (rect2.minimumEdge > this.minimumEdge) {
return -1;
} else if (rect2.minimumEdge < this.minimumEdge) {
return 1;
} else {
return 0;
}
}
public int hashCode(){
return ((width + height)*31);
}
public boolean equals(Rectangle rect2){
return (this.height == rect2.height && this.width == rect2.width);
}
}