今天遇到的一个小问题: 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,ArrayList的remove方法的一个小问题
最新推荐文章于 2021-08-17 16:50:35 发布