Thi*_*mer 102 java iterator arraylist indexoutofboundsexception
现在,我有一个包含一段代码的程序,如下所示:
while (arrayList.iterator().hasNext()) {
//value is equal to a String value
if( arrayList.iterator().next().equals(value)) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
我是否正确,只要迭代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)
Run Code Online (Sandbox Code Playgroud)
我会显示其余的代码,但它非常广泛,如果我没有正确地进行迭代,我会假设唯一的可能性是我没有ArrayList
正确初始化.
Fre*_*Foo 228
我是否正确,只要反复通过Arraylist去了?
不:通过iterator
在每次迭代中调用两次,您将始终获得新的迭代器.
编写此循环的最简单方法是使用for-each构造:
for (String s : arrayList)
if (s.equals(value))
// ...
Run Code Online (Sandbox Code Playgroud)
至于
java.lang.ArrayIndexOutOfBoundsException: -1
您刚刚尝试-1
从数组中获取元素编号.计数从零开始.
Nem*_*X00 141
虽然我同意接受的答案通常是最好的解决方案并且肯定更容易使用,但我注意到没有人显示迭代器的正确用法.所以这是一个简单的例子:
Iterator<Object> it = arrayList.iterator();
while(it.hasNext())
{
Object obj = it.next();
//Do something with obj
}
Run Code Online (Sandbox Code Playgroud)
zac*_*usz 37
List<String> arrayList = new ArrayList<String>();
for (String s : arrayList) {
if(s.equals(value)){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
要么
for (int i = 0; i < arrayList.size(); i++) {
if(arrayList.get(i).equals(value)){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
但要小心ArrayList可以保存空值.所以比较应该是
value.equals(arrayList.get(i))
Run Code Online (Sandbox Code Playgroud)
当您确定该值不为null或您应该检查给定元素是否为null.
sub*_*bbu 10
你也可以像这样使用:
for(Iterator iterator = arrayList.iterator(); iterator.hasNext();) {
x = iterator.next();
//do some stuff
}
Run Code Online (Sandbox Code Playgroud)
它是一个很好的实践来投射和使用对象.例如,如果'arrayList'包含'Object1'对象的列表.然后,我们可以重新编写代码:
for(Iterator iterator = arrayList.iterator(); iterator.hasNext();) {
x = (Object1) iterator.next();
//do some stuff
}
Run Code Online (Sandbox Code Playgroud)
您也可以像对数组一样进行for循环,但是使用list.get(i)而不是数组[i]
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
393100 次 |
最近记录: |