首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用数组列表迭代器时的ArrayIndexOutOfBoundsException

使用数组列表迭代器时的ArrayIndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2011-07-15 06:29:32
回答 6查看 393.7K关注 0票数 102

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

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

EN

回答 6

Stack Overflow用户

发布于 2012-09-20 02:29:19

虽然我同意公认的答案通常是最好的解决方案,而且绝对更容易使用,但我注意到没有人显示迭代器的正确用法。下面是一个简单的例子:

Iterator<Object> it = arrayList.iterator();
while(it.hasNext())
{
    Object obj = it.next();
    //Do something with obj
}
票数 142
EN

Stack Overflow用户

发布于 2013-04-15 23:03:34

您也可以像这样使用:

for(Iterator iterator = arrayList.iterator(); iterator.hasNext();) {
x = iterator.next();
//do some stuff
}

强制转换和使用对象是一个很好的实践。例如,如果'arrayList‘包含一个'Object1’对象的列表。然后,我们可以将代码重写为:

for(Iterator iterator = arrayList.iterator(); iterator.hasNext();) {
x = (Object1) iterator.next();
//do some stuff
}
票数 10
EN

Stack Overflow用户

发布于 2011-07-15 06:36:32

您也可以像处理数组一样执行for循环,但您将使用list.get(i)代替arrayi。

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6700717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档