簡體   English   中英

檢查Java是否包含對象

[英]Check if a contains an object in Java

我有以下對象,

public class Pair {
    private int row;
    private int col;

    public Pair(int row, int col){
        this.row = row;
        this.col = col;
    }

    public int getRow(){
        return row;
    }
    public int getCol(){
        return col;
    }
}

我將這些對存儲在隊列中,但是不想檢查隊列中是否已經包含該對。 這是我的代碼。

Queue<Pair> queue = new LinkedList<>();
if(!queue.contains(new Pair(curr.getRow(), curr.getCol()){
 //do something
}

這不起作用,隊列正在存儲重復的值。 有人可以幫助大眾了解原因以及解決方法嗎?

您沒有重寫Object.equals(Object)因此僅對引用標識具有相等性。 您需要添加類似

@Override
public boolean equals(Object o) {
    if (o instanceof Pair) {
        Pair other = (Pair) o;
        return row == other.row && col == other.col;
    }
    return false;
}

並且無論何時重寫equals ,都強烈建議您也重寫Object.hashCode() (例如,與HashSet一起使用),例如

@Override
public int hashCode() {
    return Integer.hashCode(row) + Integer.hashCode(col);
}

最后,您最好覆蓋Object.toString()以便可以輕松顯示這些Pair 就像是,

@Override
public String toString() {
    return String.format("Pair: (%d, %d)", row, col);
}

您應該在Pair類中重寫equals方法。 查閱此參考資料如何在Java中覆蓋equals方法

暫無
暫無

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

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