2011-10-04 111 views
1

我试图从一个ArrayList中删除一个对象,我的代码是从ArrayList中移除时java.lang.IndexOutOfBoundsException?

ArrayList myArrayList=new ArrayList(); 

for(int index=0;index<20;index++){ 
    myArrayList.add(index); 
} 

for(int removeIndex=0;removeIndex<=mArrayList;removeIndex++){ 
     myArrayList.remove(removeIndex); 
} 

这是给java.lang.IndexOutOfBoundsException。如何从ArrayList中删除多个对象?

回答

6

当然,只要您删除第0项,最后一项现在是第18项,因为这些项被重新编制索引。

您可以使用几个技巧,例如,从最后开始删除。或者删除第0个项目,直到数组为空(或者直到删除了一些预定义数量的项目)。

代码:

for(int index = mArrayList.size() - 1; removeIndex >= 0; removeIndex--) { 
    myArrayList.remove(removeIndex); 
} 

for(int nremoved = mArrayList.size() - 1; nremoved >= 0; nremoved--) { 
    myArrayList.remove(0); 
} 

如果要删除所有项目,可以考虑使用clear()为好。

如果你想从列表中删除多个位置,你可以尝试以下方法:

Collections.sort(positions); // needed if not already sorted 
for (int i = positions.size() - 1; i >= 0; i--) 
    myArrayList.remove(positions.get(i)); 
+0

您好vlad thks的回复,确切地说我的问题是如何从arraylist中删除一个(使用清除()) – suresh

+0

它工作正常.......假设我想删除特定的位置,如[0,3,7,11,19]在这里我采取了一个更多arrayList的那些位置 – suresh

+0

我的概率是,我有一个ListView,我的ListView包含复选框默认情况下所有复选框选中如果我们取消选中任何复选框,那么添加到mCheckedArrayList.i的位置要从Listview中移除所有取消选中的位置。 – suresh

2

List#clear()将删除所有元素。

+0

嗨约翰thks回复,确切的我的问题是如何从arraylist中删除(使用清除()) – suresh

+0

while(列表不是空的),然后删除第0个索引或从最后一个索引中删除。按照弗拉德的建议。 –

0

您正在比较removeIndexArrayList本身,而不是ArrayList.size()。此外,在比较中,您应该使用小于(<)而不是小于或等于(<=),因为使用<会导致产生indexOutOfBoundsException的额外循环。

此外,开始删除在ArrayList的结尾,而不是在开始,以避免重新索引元素,这也可能导致indexOutOfBoundsException。 (不是在这种情况下,因为你每次循环与Array.size()进行比较,而是像Vlad也提到的那样删除每一项。)

0

你必须在删除时检查'<'。

ArrayList myArrayList = new ArrayList(); 

     for(int index=0;index<20;index++){ 
      myArrayList.add(index); 
     } 

     for(int removeIndex=0;removeIndex<myArrayList.size();removeIndex++){ 
       myArrayList.remove(removeIndex); 
     } 
0

,如果你需要从阵列中删除所有的元素,如果有可能的话,最好将

myArrayList = new ArrayList(); 

和内循环,你必须这样重置阵列,因为clear()removeAll()不工作

0

在最常见的方式使用iterator而不是:

final Iterator<? extends T> it = collection.iterator(); 
while (it.hasNext()) { 
    T t = it.next(); 
    if (isNeedToRemove(t)) { 
     it.remove(); 
    } 
}