Java - HashSet contains()方法不起作用?

时间:2014-09-12 03:34:30

标签: java hashmap hashset

我遇到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[]

1 个答案:

答案 0 :(得分:2)

数组相等仅由引用。您在询问该集合是否包含完全相同的数组对象,它不会检查数组的内容以查看"类似的"数组存在。

相关: