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我会逐步检查调试器中的代码以确认这一点。