您的位置:首页 > 其它

今天遇到的对List,ArrayList的remove方法的一个小问题

2011-08-12 20:50 387 查看
今天遇到的一个小问题:
 package com.jiangqq;
import java.util.ArrayList;
import java.util.List;
public class Test01 {
/**
* @param args
*/
public static void main(String[] args) {
List<String> lists = new ArrayList<String>();
lists.add("ad");
lists.add("abc");
lists.add("abcd");
lists.add("abcde");
for (int i = 0; i < lists.size(); i++) {
String s = lists.get(i);
if (s.equals("ad")) {
lists.remove(s);
continue;
}
System.out.println(s);
}
}
}
本程序的运行结果为:
当人这个结果是错误的:  读下程序就知道  正确的结果应该为:
abc
abcd
abcdd
分析为什么会会出现这样的结果;里面当刚开始循环i=0时  String s=ab; 测试判断可以经过remove(s),此时i=1,但是也把lists中的ab,元素删除了,这步骤造成的结果是:lists长度变短了,此时i=1,lists.size()=3,这样循环就会绕过abc这个元素,所以就出现以上那种错误结果了;把此程序改下就行:

package com.jiangqq;
import java.util.ArrayList;
import java.util.List;
public class Test01 {
/**
* @param args
*/
public static void main(String[] args) {
List<String> lists = new ArrayList<String>();
lists.add("ad");
lists.add("abc");
lists.add("abcd");
lists.add("abcde");
for (int i = 0; i < lists.size(); i++) {
String s = lists.get(i);
if (!s.equals("ad")) {
System.out.println(s);
}
}
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  list string class 测试