我創建了一個名爲Idea的簡單類,其中包含ColumnPositions的HashSet(另一個類,我只創建了一個x和y字段)。在ColumnPosition的equals和hashCode方法是這樣的:刪除Java中的HashSet中的用戶定義對象
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
System.out.println("hashCode: " + result);
return result;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof ColumnPosition) {
ColumnPosition cp = (ColumnPosition) obj;
if (cp.x != this.x || cp.y != this.y) {
return false;
}
}
return true;
}
然而,當我去驗證這一想法類和嘗試的想法對象的HashSet中刪除ColumnPosition對象。它不起作用。怎麼了??謝謝!
public void test_HashSetRemoveColumnPosition() {
ColumnPosition column_03 = new ColumnPosition(0, 3);
Set<ColumnPosition> columns = new HashSet<ColumnPosition>();
columns.add(column_03);
this.idea.getColumnPositions().add(column_03);
assertEquals(1, columns.size());
assertTrue(this.idea.getColumnPositions().remove(column_03)); // this is passing
assertEquals(0, columns.size()); // this is failing because columns.size() still equals 1. WHAT?! How is this possible if the remove method returned true?
}
第一個問題:當有人用任何非ColumnPosition對象調用equals時,你返回true。 –
我想我們需要查看'this.idea.unionColumnPositions(columns)'和'this.idea.getColumnPositions()'的來源。 – GriffeyDog
接下來,拿出'unionColumnPositions'等部分 - 我們不知道這是什麼。例如,嘗試'columns.remove(column_03)'。我懷疑這會起作用。那麼你需要看看'unionColumnPositions'的作用。 –