悟心

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。 上人生的旅途罢。前途很远,也很暗。然而不要怕。不怕的人的面前才有路。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  93 随笔 :: 1 文章 :: 103 评论 :: 0 Trackbacks
import java.util.*;

  
public class object {

  
public static void main(String[] args) {

  String str1 
= new String("abcde");

  String str2 
= new String("abcde");

  String str3 
= new String("abcde");

  String str4 
= new String("abcde");

  String str5 
= new String("abcde");

  List list 
= new ArrayList();

  list.add(str1);

  list.add(str2);

  list.add(str3);

  list.add(str4);

  list.add(str5);

  System.out.println(
"list.size()=" + list.size());

  
for (int i = 0; i < list.size(); i++) {

  
if (((String) list.get(i)).startsWith("abcde")) {

  list.remove(i);

  }

  运行结果不是:

  list.size()
=5

  after remove:list.size()
=0

  居然是:

  list.size()
=5

  after remove:list.size()
=2

  原因: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();

  }

  }

  }

  System.out.println(
"after remove:list.size()=" + list.size());

  }

  }
posted on 2010-11-15 13:56 艾波 阅读(555) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: