我遇到HashSets问题。我的程序执行广度优先搜索,我制作了一个哈希集来跟踪访问状态。状态由int[]
数组表示。但是,HashSet的contains方法似乎没有按预期工作。基本上,它不会过滤掉已经添加的int[]
数组。
以下是我的代码的相关部分:
private boolean notVisitedAndNotNull(PuzzleState nextPS) {
if (nextPS != null && !this.visited.contains(nextPS.getStateArray))
return true;
return false;
}
private void addToQueue(PuzzleState nextPS) {
if (notVisitedAndNotNull(nextPS))
queue.add(nextPS);
}
private boolean solveByBFS() {
queue.clear();
queue.add(this.initialState);
long startTime = System.currentTimeMillis();
while(!queue.isEmpty()) {
if (queue.size() > maxQueueSize)
maxQueueSize = queue.size();
this.currentState = queue.poll();
if (this.currentState.equals(finalState)) {
System.out.println("Successful! Ending Time: " + startTime);
return true;
}
visited.add(this.currentState.getStateArray()); //this adds int[] array
this.addToQueue(this.currentState.moveUp());
this.addToQueue(this.currentState.moveDown());
this.addToQueue(this.currentState.moveRight());
this.addToQueue(this.currentState.moveLeft());
}
return false;
}
我为张贴这么多代码而道歉。我搜索了一下,似乎为了让HashSet正常工作,我必须实现hashCode
的{{1}}和equals
。我不确定HashSet
数组是否可行。是否最好只使用int[]
,然后在HashMap
数组上使用toString
方法作为密钥?
好的,我现在就开始工作了。如果有兴趣的话,这是我添加的代码:
int[]
答案 0 :(得分:2)
数组相等仅由引用。您在询问该集合是否包含完全相同的数组对象,它不会检查数组的内容以查看"类似的"数组存在。
相关: