Java 列表不为空,但poll方法返回null

Java 列表不为空,但poll方法返回null,java,tree,queue,Java,Tree,Queue,我的方法应该计算集合节点中节点的深度,但对于某些树,会调用NullPointerException,这是因为queue.poll()返回null。在该方法的描述中,据说queue.poll()在且仅当队列为空时返回null。这种情况是在while循环中检查的,所以我的问题是,为什么会发生这种错误以及如何修复它 private Map<Tree, Integer> determineDepth(Tree root, Set<Tree> nodes) { Map<

我的方法应该计算集合
节点
中节点的深度,但对于某些树,会调用
NullPointerException
,这是因为
queue.poll()
返回null。在该方法的描述中,据说
queue.poll()
在且仅当队列为空时返回null。这种情况是在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;
}
private Map determinatedepth(树根,集合节点){
Map depthMap=newhashmap();
访问的映射=新的HashMap();
LinkedList队列=新建LinkedList();
depthMap.put(根,0);
访问。放置(根,真);
添加(根);
树节点;
while(queue.size()!=0){
node=queue.poll();
int depth=depthMap.get(节点);
对于(树子节点:node.children()){
深度贴图放置(子对象,深度+1);
访问。putIfAbsent(儿童,假);
如果(!已访问。获取(子项)){
访问。放置(儿童,真实);
添加(子级);
}
}
}
返回深度图;
}

如果将
null
添加到LinkedList,它将被保留。e、 g

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

如果将
null
添加到LinkedList,它将被保留。e、 g

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

我会将
visted
设置为
Set
并使用
if(visted.add(child))
您尚未发布异常的堆栈跟踪,因此我们无法确认您的诊断是否正确。但是如果列表的第一个元素为null,LinkedList.poll()也可以返回null。我会将
已访问的
设置为
并使用
if(已访问的.add(child))
您尚未发布异常的堆栈跟踪,因此我们无法确认您的诊断是否正确。但是如果列表的第一个元素为null,LinkedList.poll()也可以返回null。我遍历子元素,因此不能插入null元素。所以这个问题只有在根为null时才会发生,对吗?@S.Werner我会在调试器中逐步检查代码以确认这一点。我会遍历子元素,所以不能插入null元素。所以这个问题只有在根为null时才会发生,对吗?@S.Werner我会逐步检查调试器中的代码以确认这一点。