今天写一段代码时遇到了点小问题,遍历某个List,当符合条件时删除该项。第一种写法报错,第二种写法只删了一半,第三种写法正确。我记得以前看过,说是第一种写法是指针性质的,不能这样删除。希望有人详细说一下。第二种方法我的理解是:当删除了当前项后,下一项会向前移,下标变为当前项,所以下一项不会做判断。
求人指点或探讨。谢谢!
1.
List<Detail> mqList=bean.getMqList();
for(Detail d:mqList){
if(符合某条件){
mqList.remove(d);
}
}2.
List<Detail> mqList=bean.getMqList();
for(int i=0;i<mqList.size();i++){
if(符合某条件){
mqList.remove(i);
}
}3.
List<Detail> mqList=bean.getMqList();
Iterator i=mqList.iterator();
while(i.hasNext()){
if(符合某条件){
i.remove();
}
}
求人指点或探讨。谢谢!
1.
List<Detail> mqList=bean.getMqList();
for(Detail d:mqList){
if(符合某条件){
mqList.remove(d);
}
}2.
List<Detail> mqList=bean.getMqList();
for(int i=0;i<mqList.size();i++){
if(符合某条件){
mqList.remove(i);
}
}3.
List<Detail> mqList=bean.getMqList();
Iterator i=mqList.iterator();
while(i.hasNext()){
if(符合某条件){
i.remove();
}
}
解决方案 »
- String转换为double类型,棘手
- 江湖救急 三张表的hibernate映射怎么写
- 求达人来具体解释WEB.XML到底是什么东西?
- 如果学习JSP课程!
- JSF的配置
- 初学者200分请教入门概念,另开贴送100分
- 请教struts validator简单问题
- [急问]lucene在main中通过,用jsp调用报错
- 怎么用贝叶斯定理来开发一个过滤器?(只要提供些线索就好了)
- getHibernateTemplate的find方法有时候执行有时候不执行是怎么回事?
- java写的WEBSERVIVE用C#调用,获取返回数据不全!
- 【JSP四种会话跟踪技术】????????????????????????????????
http://www.blogjava.net/fingki/archive/2010/03/02/314268.html
第二种写法的问题很简单,就是移除后元素减少了,但是计数器(i)没有响应减少,所以位置就错了;
第三种写法是第一种的改进,正确的使用了Iterator的remove,而不是List自己的remove,所以正确。
还有可以这么写:
while(!mqList.isEmpty()) {
Detail d = mqList.remove(0);
}
第二种,remove(i)后,i+1那个位置的就漏掉了,所以,执行remove(i)后,要i--