簡體   English   中英

在Java中的HashSet中刪除用戶定義的對象

[英]Removing a user defined object in a HashSet in Java

我創建了一個名為Idea的簡單類,該類具有ColumnPositions的HashSet(另一個我只用x和y字段創建的類)。 ColumnPosition中的equals和hashcode方法如下所示:

@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;
}

但是,當我去測試Idea類並嘗試刪除Idea對象的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?
}

確保this.idea.getColumnPositions()columns是同一對象。

您有2個哈希集:測試中的局部變量和測試類中的字段。 它們是不一樣的,因此當您從一個刪除時,另一個不會被修改...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM