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,则刚刚移过来的元素没有被读取。

  解决方法倒过来遍历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()); 
  } 
  }