读书人

List剔除符合条件项

发布时间: 2012-08-16 12:02:15 作者: rapoo

List删除符合条件项
今天写一段代码时遇到了点小问题,遍历某个List,当符合条件时删除该项。第一种写法报错,第二种写法只删了一半,第三种写法正确。我记得以前看过,说是第一种写法是指针性质的,不能这样删除。希望有人详细说一下。第二种方法我的理解是:当删除了当前项后,下一项会向前移,下标变为当前项,所以下一项不会做判断。
求人指点或探讨。谢谢!
1.

Java code
List<Detail> mqList=bean.getMqList();for(Detail d:mqList){  if(符合某条件){    mqList.remove(d);}}

2.
Java code
List<Detail> mqList=bean.getMqList();for(int i=0;i<mqList.size();i++){  if(符合某条件){    mqList.remove(i);}}

3.
Java code
List<Detail> mqList=bean.getMqList();Iterator i=mqList.iterator();while(i.hasNext()){  if(符合某条件){    i.remove();}}



[解决办法]
第一种写法,实际上走的是迭代器,而List的remove不会更新迭代器状态,具体参见这里:
http://www.blogjava.net/fingki/archive/2010/03/02/314268.html


第二种写法的问题很简单,就是移除后元素减少了,但是计数器(i)没有响应减少,所以位置就错了;


第三种写法是第一种的改进,正确的使用了Iterator的remove,而不是List自己的remove,所以正确。


还有可以这么写:
while(!mqList.isEmpty()) {
Detail d = mqList.remove(0);
}

读书人网 >J2EE开发

热点推荐