您的位置:首页 > 其它

关于ArrayList的remove

2016-05-07 17:44 295 查看
当我们要在一个ArrayList当中删除掉特定的几个元素的时候,在用for循环遍历ArrayList的时候是不可以删的,否则会报错,应该先得到当前list的一个iterator对象再删除,代码如下:

Iterator<String> sListIterator = list.iterator();
while(sListIterator.hasNext()){
String e = sListIterator.next();
if(e.equals("anything")){
sListIterator.remove();
}
}


有时候我们必须要用for循环来遍历一个ArrayList,原因可能是需要对下标操作或其它,这个时候可以先记录下要删除的元素的下标,遍历完之后再删除。代码如下:

ArrayList<Integer> deleteNums = new ArrayList<Integer>();
for (int i = 0; i < alist.size(); i++) {
if (meet remove condition) {
deleteNums.add(i);
}
}
for (int i = deleteNums.size() - 1; i >= 0; i--) {
alist.remove((int)deleteNums.get(i));
}


作个简单说明:为什么最后执行remove的时候要倒着从index最大的开始删起呢,因为ArrayList的特点就是删除后剩下的元素会保持原来的顺序,如果删除了其中一条index = 6的数据,那么index > 6 的数据的index会全部减一,也就是说删除一个元素只对此元素后面的元素的位置产生影响,这样倒着删除当然就能保证删掉的是自己想删的。还有就是千万不要忘记deleteNum.get(i) 前面的(int),我刚开始没有加这个转型,结果一条数据都不会被删掉,也不报错,原因是deleteNums.get(i)是包装类型,而remove(int
index)这个方法只认int类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  arraylist iterator remove