下面是一些代碼,用於查看從左上角到右下角是否存在迷宮中的路徑。我對這段代碼的問題是我們檢查failedPoints.contains(p)
:我們怎麼能得到true
?爲什麼具有相同值的不同對象會導致HashSet.contains返回true?
在我們做之前if(failedPoints.contains(p))
我們正在創建一個新的Point
對象。即使新對象和col
的值與另一個Point
在failedPoints
中具有相同的值,對象也會不同,因此不應該總是返回false
?
boolean getPath(boolean[][] maze, int row, int col, ArrayList<Point> path, HashSet<Point> failedPoints){
/*if out of bounds or not available, return*/
if(col<0 || row<0 || !maze[row][col]){
return false;
}
Point p = new Point(row,col);
/* If we've already visited this cell return*/
if(failedPoints.contains(p)){
return false;
}
boolean isAtOrigin = (row == 0) && (col == 0);
/*If there's a path from start to my current location, add my location.*/
if(isAtOrigin || getPath(maze,row,col -1, path, failedPoints) || getPath(maze,row-1, col, path,failedPoints)){
path.add(p);
return true;
}
failedPoints.add(p); //Cache result
return false;
}
你讀過「包含」了嗎?什麼不清楚? – Tom
.contains將檢查對象是否包含在哈希集中。但是,如果我創建了一個新的對象,其值與哈希集中的另一個對象相同,即使對象不同,即使它們的屬性可能相同,hashset.contains仍然會返回false – Matt
那就是讓我困惑的東西 – Matt