class Point{
int x, y, l;
Point(int x, int y, int l){
this.x =x;
this.y =y;
this.l=l;
}
@Override
public int hashCode() {
return y;
}
@Override
public boolean equals(final Object obj) {
if(this == obj) return true;
if(!(obj instanceof Point)) return false;
Point p = (Point) obj;
return this.x == p.x && this.y == p.y;
}
}
TreeMap<Point,Integer> sortedMap = new TreeMap<>((p1, p2)-> p1.l-p2.l);
sortedMap.put(new Point(4,5,0),0);
sortedMap.put(new Point(5,5,0),6);
System.out.println(sortedMap.size()); -> Output: 1
System.out.println((new Point(4,5,0)).equals(new Point(5,5,0))); -> Output -> False.
クラスのequalsメソッドを両方ともオーバーロードしました。 putメソッドはequalsメソッドを使用して、同じオブジェクトが存在するかどうかを判断する必要があります。しかし、期待どおりに動作していません。TreeMap putが期待どおりに動作しない
なぜ私のhashMapサイズが1であるのかわかりません。ハッシュマップが間違って動作していると分かっていれば教えてください。このコードでバグを特定するのを助けてくれますか?
平等性チェックが 'p1.l-p2.l'ですか。 –
変数がセットではなくマップであるときに、変数 'sortedSet'を呼び出すのはなぜですか? –
@ MuratK:それは平等チェックではありません。注文です。 –