现在,我有一个包含如下代码的程序:
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
。
发布于 2012-09-20 02:29:19
虽然我同意公认的答案通常是最好的解决方案,而且绝对更容易使用,但我注意到没有人显示迭代器的正确用法。下面是一个简单的例子:
Iterator<Object> it = arrayList.iterator();
while(it.hasNext())
{
Object obj = it.next();
//Do something with obj
}
发布于 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
}
发布于 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));
}
https://stackoverflow.com/questions/6700717
复制相似问题