iterator.hasNext()返回错误的值

时间:2013-02-01 14:50:00

标签: java list recursion

我正在尝试在递归方法中使用迭代器。如果列表中没有剩下的下一个元素,它应该退出该方法。但是如果光标位于最后位置,则iterator.hasNext()的检查会返回true,除了false之外我还没有?

任何想法和提示?

我不是要张贴图片所以我会把它写下来。这就是我在Eclipse-Debugger-View中看到的:

iterator             | AbstractList$Itr (id=448)

 - cursor            | 2
 - excpectedModCount | 2
 - lastRet           | 1
 - this$0            | ArrayList<E> (id=438)
 - elemtData         | Object[10] (id=462)

 ---modCount         | 2

 ---size             | 2

这是代码

static void resolveWithIterator(List<SomethingContext> list, Iterator<ContextResolveHelper> iterator, List<ContextResolveHelper> resolverList)
{
    boolean end = resolverList.iterator().hasNext();
    if (list.size() == 1 || !end){
        resolvedList.add(list);
        return;
    }else{
        ContextResolveHelper acutalEntry = iterator.next();
    List<SomethingContext> tempQRes2 = new ArrayList<SomethingContext>();
        for (SomethingContext smtCtx : list){
            if (//check various things){
                tempQRes2.add(smtCtx);
            }
        }
        resolveWithIterator(tempQRes2, iterator, resolverList);
    }
}

2 个答案:

答案 0 :(得分:2)

我认为问题在于逻辑本身,正如你所写的那样,你用以下函数调用函数:

Iterator<ContextResolveHelper> iterator = resolverList.iterator();    
resolveWithIterator(searchCtxResult, iterator, resolverList);

但是,在方法本身你做两件事,你在新的迭代器上检查,而不是提供的那个

boolean end = resolverList.iterator().hasNext();

,如果至少有一个元素,它将返回true。

调用iterator()总是返回新的迭代器,你应该使用参数中提供的迭代器。

答案 1 :(得分:1)

我看到的唯一hasNext()resolverList.iterator().hasNext()。由于每次都有一个新的迭代器,当然它总是有一个“下一个”,除非列表本身是空的。