Список не пуст, но метод poll возвращает ноль - PullRequest
0 голосов
/ 25 октября 2018

Мой метод должен вычислять глубину узлов в наборе nodes, но для некоторых деревьев вызывается NullPointerException, что происходит потому, что queue.poll() возвращает ноль.В описании метода говорится, что queue.poll() возвращает ноль тогда и только тогда, когда очередь пуста.Это условие проверяется в цикле while, поэтому у меня вопрос, почему эта ошибка может возникнуть и как ее исправить.

private Map<Tree, Integer> determineDepth(Tree root, Set<Tree> nodes) {
    Map<Tree, Integer> depthMap = new HashMap<>();
    Map<Tree, Boolean> visited = new HashMap<>();
    LinkedList<Tree> queue = new LinkedList<Tree>();

    depthMap.put(root, 0);
    visited.put(root, true);
    queue.add(root);
    Tree node;
    while (queue.size() != 0) {
        node = queue.poll();
        int depth = depthMap.get(node);
        for (Tree child : node.children()) {
            depthMap.put(child, depth + 1);
            visited.putIfAbsent(child, false);
            if (!visited.get(child)) {
                visited.put(child, true);
                queue.add(child);
            }
        }
    }
    return depthMap;
}

1 Ответ

0 голосов
/ 25 октября 2018

Если вы добавите null в LinkedList, он будет сохранен.например,

List l = new LinkedList();
l.add(null);
assert l.size() > 0;
Object o = l.poll(); // == null
...