当前位置: 首页 > 面试题库 >

使用ArrayList的迭代器时出现ArrayIndexOutOfBoundsException

杨凯旋
2023-03-14
问题内容

现在,我有一个包含以下代码的程序:

while (arrayList.iterator().hasNext()) {
     //value is equal to a String value
     if( arrayList.iterator().next().equals(value)) {
          // do something 
     }
}

就遍历ArrayList而言,我这样做是否正确?

我得到的错误是:

java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.get(Unknown Source)
    at main1.endElement(main1.java:244)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at main1.traverse(main1.java:73)
    at main1.traverse(main1.java:102)
    at main1.traverse(main1.java:102)
    at main1.main(main1.java:404)

我将显示其余的代码,但内容相当广泛,如果我没有正确进行迭代,我将认为唯一的可能性是我没有ArrayList正确初始化。


问题答案:

就遍历Arraylist而言,我这样做是否正确?

否:通过iterator在每次迭代中调用两次,您将始终获得新的迭代器。

编写此循环的最简单方法是使用for-
each
构造:

for (String s : arrayList)
    if (s.equals(value))
        // ...

至于

java.lang.ArrayIndexOutOfBoundsException: -1

您只是试图-1从数组中获取元素编号。计数从零开始。



 类似资料:
  • 问题内容: 我从下面的代码中获得,我可以找到原因。我可以成功地从csv文件读取数据,并创建一个名为课程列表的arraylist。那么我需要将其排序到一个数组列表,该数组的每个单元格都包含相同课程(名称相似的课程)的数组列表。但是当我运行它时会生成ConcurrentModificationException,我不明白为什么… 这是我的CourefileSorterclass: 问题答案: 将它们分

  • 所有订阅操作都使用以下内容: 所有取消订阅操作都使用以下内容: 和通知者:

  • 本文向大家介绍C++ 使用输出迭代器,包括了C++ 使用输出迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 通过将输出迭代器传递给函数,可以返回相同类型的多个值。这对于一般功能(例如标准库的算法)尤其常见。 例: 用法示例:            

  • 问题内容: 编辑:感谢您的所有迅速答复。现在,我看到该作业将无效。从另一个线程,我读到Java中的迭代器比C ++中的迭代器功能强大得多。请问为什么在Java中使用迭代器?只是要替换“ for”循环?谢谢。 一些注意事项: 第二个迭代器应从第一个迭代器之后的位置开始。 我尝试从头开始遍历一个有序列表,然后在列表中找到一些对象,这些对象具有与aItr所指向的属性相似的属性。 我不介意使用两个“ fo

  • IM有下一个模型和集合定义: 日志记录显示,集合创建正确: {长度:15,模型:数组[15],_byId:对象,构造函数:函数,模型:函数...} 但是,当尝试迭代集合(在渲染视图方法中)时,显然无法正确获取当前元素: console.log,而不是返回模型,返回: {cid:“c1”,属性:对象,集合:r,_changing:false,_previousAttributes:Object…}