黑马程序员技术交流社区

标题: ArrayList删除错误的误区,希望大家记住不要犯类似错误 [打印本页]

作者: _etc    时间: 2015-4-3 23:41
标题: ArrayList删除错误的误区,希望大家记住不要犯类似错误
哥们今天删除元素的操作做出来一些毛病,实在不知道什么原因。请教大神,得出结论。希望大家能够总结经验,不要犯类似错误。
代码如下:
ArrayList<String> list = new ArrayList<>();
list.add("hello");
                list.add("world");
                list.add("java");
                list.add("java");
list.add("java");
for (int i = list.size()-1; i >= 0; i--) {
                        if("java".equals(list.get(i))){
                                list.remove(i);
                        }
        }
当时我是非常不解,为什么删不干净呢。后来明白ArrayList来删除一个元素,角标就会往前走1;到最后删除只能删除一半,解决办法是从后往前删。改进版本:
for (int i =0; i < list.size(); i++) {
                        if("java".equals(list.get(i))){
                                list.remove(i);
                        }
}



作者: 飞翔的侠客604    时间: 2015-4-4 00:16
好的,学习了
作者: z47057554    时间: 2015-4-4 15:19
这个应该是因为ArrayList是可变长度引起的,开始角标为 0 1 2 3,当你把1角标删了之后,那么原来的2-->1,3-->2,而你此时的角标 i 已经加1,那么,新出来的1会被跳过去,你正着也可以删,只是要把 i 的控制放到for里面,不要每次都加1,譬如:
for (int i =0; i < list.size(); ) {
                        if("java".equals(list.get(i))){
                                list.remove(i);
                                continue;
                        }
                        i++;
}
作者: xiaogougou    时间: 2015-4-4 17:33
哈哈。。。
作者: JarryHorse    时间: 2015-4-4 17:57
本帖最后由 JarryHorse 于 2015-4-4 17:58 编辑
z47057554 发表于 2015-4-4 15:19
这个应该是因为ArrayList是可变长度引起的,开始角标为 0 1 2 3,当你把1角标删了之后,那么原来的2-->1,3 ...

哥们儿好有杀气




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