黑马程序员技术交流社区
标题: 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 编辑
哥们儿好有杀气
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |