`
bugyun
  • 浏览: 541187 次
社区版块
存档分类
最新评论

List 中 remove 的使用

    博客分类:
  • Java
 
阅读更多

 

for (int i = 0; i < list.size(); i++) {
			if (((String) list.get(i)).startsWith("abcde")) {
				list.remove(i);
			}
		}

 List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取

 

 

1.倒过来遍历list

 

for (int i = list.size()-1; i > =0; i--) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
  }
}

 

2.每移除一个元素以后再把i移回来

 

for (int i = 0; i < list.size(); i++) {
  if (((String) list.get(i)).startsWith("abcde")) {
   list.remove(i);
   i=i-1;
  }
}

 

3.使用iterator.remove()方法删除

for (Iterator it = list.iterator(); it.hasNext();) {
  String str = (String)it.next();
  if (str.equals("chengang")){
   it.remove();
  }
}

 

分享到:
评论
2 楼 bugyun 2015-10-16  
QuarterLifeForJava 写道
是的,是的,其实个人还是比较偏好“1.倒过来遍历list”
不过现在java8,可以采用如下方法:
list = list.stream()
           .filter(x->!x.startsWith("abcde"))
	   .collect(Collectors.toList());;
System.out.println(list);

java8这种格式没用过,如果性能没有特别出色的话,我还是会选择以上三种简洁的格式
1 楼 QuarterLifeForJava 2015-10-14  
是的,是的,其实个人还是比较偏好“1.倒过来遍历list”
不过现在java8,可以采用如下方法:
list = list.stream()
           .filter(x->!x.startsWith("abcde"))
	   .collect(Collectors.toList());;
System.out.println(list);

相关推荐

Global site tag (gtag.js) - Google Analytics