黑马程序员技术交流社区

标题: Arraylist集合去重复为什么还剩一个啊 [打印本页]

作者: gaojing69485542    时间: 2015-11-1 10:56
标题: Arraylist集合去重复为什么还剩一个啊
ArrayList<String> list = new ArrayList<>();
                list.add("java");
                list.add("aaa");
                list.add("java");
                list.add("java");
        list.add("bbb");
for (int i =0; i < list.size(); i++) {
                        if("java".equals(list.get(i))){
                                list.remove(i);

                        }
        }
作者: 大自然的搬运工    时间: 2015-11-1 11:49
没看懂想问啥。。。。飘过。。
作者: Jero    时间: 2015-11-2 10:24
首先就这个问题分析,当你遍历的时候,从第0个元素开始,移除了第0个元素"java",随后aaa,java,java变成了第0,1,2个元素,接下来遍历的索引是1,就是拿到的是原来list里面索引为2的java,移除掉。接下来数组变成aaa,java,并且索引为0,1,当下一次循环的时候,索引为2,就不再进去了。要改正这个程序,应该这样:

public class Main {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();
        list.add("java");
        list.add("aaa");
        list.add("java");
        list.add("java");

        for (int i = list.size(); i >= 0; i--) {
            list.remove("java");
        }
        System.out.println(list);
    }

}
作者: 大地z灵    时间: 2015-11-2 11:34
漏掉的是第二个“java”,移除元素后应该变量i--;
ArrayList<String> list = new ArrayList<>();
                list.add("java");
                list.add("aaa");
                list.add("java");
                list.add("java");
                list.add("bbb");
for (int i =0; i < list.size(); i++) {
                        if("java".equals(list.get(i))){
                                list.remove(i);
                                i--;
                        }
        }
作者: 会盟天下英豪    时间: 2015-11-3 18:54
楼上说的对

作者: 孤单背影    时间: 2015-11-3 21:25
直接用迭代器不是更省脑子?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2