[英]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.