当前位置: 首页 > 知识库问答 >
问题:

LinkedList迭代器next()即使在hasNext()返回true后调用,也会引发NoTouchElementException

逄念
2023-03-14

LinkedList迭代器next()即使在hasNext()返回true后调用,也不会引发任何TouchElementException。

环境:Sun Solaris上的Java6

知道为什么我在Next()方法调用时遇到这个异常吗?

// lines is an instance of LinkedList
// writer is a FileWriter, Believe that is irrelevant to issue
while(lines.hasNext()){
    int i = 0;
    do {
            writer.write(lines.next());
            writer.newLine();
            i++;
    } while (lines.hasNext() && i < targetLineCount);
    // Some more code... 
}

使用更多代码更新

public class MyClass { // Only one instance of this class is used across application
    private List<String> master = new LinkedList<String>();
    // Other instance members to tune this instance behaviour

    public MyClass(){
        // Read Source & populate master
    }

    public boolean writeDataSlot(Writer writer, int targetLineCount){ // Can be called by different Threads
        Ierator<String> lines = master.iterator();
        while(lines.hasNext()){
            int i = 0;
            do {
                writer.write(lines.next());
                writer.newLine();
                i++;
            } while (lines.hasNext() && i < targetLineCount);
            // Some more code to populate slot from different source.
        }
    }
}

共有2个答案

金和雅
2023-03-14

我看到了这些可能性:

  1. <代码>行是从另一个线程使用的
  2. <代码>行。next()在中调用。//其他一些代码
  3. 已绑定到中的另一个实例//其他一些代码
葛成双
2023-03-14

正如Axel所指出的,这似乎是一个线程问题。

如果使此方法同步,会发生什么情况?

public synchronized boolean writeDataSlot(Writer writer, int targetLineCount)
 类似资料:
  • 将这些视为对象: 查看java文档,对于LinkedList类,LinkedList类中没有迭代器方法的实现,但是,实现是在AbstractSequentialList类中。 listIterator()方法在AbstractList类中实现,AbstractSequentialList的父类,总结一下,如果我没弄错的话,它返回一个不使用节点概念的迭代器对象。 但是方法是在LinkedList类中

  • 问题内容: 这是我的代码。出于某种原因,如果我提交表单时未放置密码,则仍会创建数据库条目。整个代码中散布着一些注释,但是代码相当简单。有任何想法吗? 问题答案: 如果声明了变量,则仍然设置空字符串和/或空字符串。尝试这个:

  • 我注意到以下场景中有一点奇怪的行为: 迭代器- 原始迭代器的hasNext()在已经返回false之后,会被额外调用一次。 这正常吗? 如果我删除map()或用类似count()或collect()的内容替换最终的itearator(),它将在没有冗余调用的情况下工作。 输出

  • 问题内容: 我当前正在编写一个脚本,该脚本必须检查所有指定的文件夹是否实际存在。我发现我必须将os.path.isdir()与绝对路径一起使用。 我有以下目录结构: 当我打开op我的python命令行并尝试文件夹是否确实存在时,我得到以下信息: 这很奇怪,因为当我将这些路径复制并粘贴到Windows资源管理器中时,我可以毫无问题地访问它们。我检查了权限,所有文件夹都具有相同的权限。有人知道我在做什

  • 问题内容: Python迭代器没有方法吗? 问题答案: 不,没有这样的方法。迭代结束由异常指示。请参阅文档。

  • 我的理解是它需要检查,然后如果它是,则调用下一个方法来获取迭代器中的元素。 问题: 它在检索元素后调用,在我的例子中,使用Next检索最后一个元素并检查,然后返回并结束循环。所以我处理元素而不是元素。 或者,我使用了下面的代码。 复制代码: 输出: 缺少最后一个元素 它的工作原理类似于for循环,在Java API中,在文档中说hasNext和next是误导性的。 什么相当于Streams中的以下