如何一次性删除List里的所有元素?
2013-12-25 18:13
316 查看
一次性删除List里的所有元素?不仅听起来简单(只是有个在删除元素时元素下标动态变化的问题在里面,有点苦恼),而且做起来其实也简单(大话了,只是到了后面解决了后才觉得简单的),得益于一同行问的“js中删除元素时下标从1变为0”的问题。
出现问题的代码是这样的(他的是javascript代码,我用java的List模拟):
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
System.out.println(""); //多的输出语句只是为了方便看运行结果。
System.out.println("------------------");
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
他原本想把所有的元素都给删除的,结果最后打印出来的结果是这样的,有些没有被删除掉:
123456
--------
246
看看,这结果很明显出问题了,对吧?本来想把所有的元素都给删除,结果竟然行事不果断,“斩草没有除掉根”,悲剧了,还剩下3个( 我竟然会想到斩草除根这个词,暗暗佩服自己。)。他一开始就思考到了问题的最根本原因,就是第二次删除的时候,原本下标为1的元素的下标就由1变为0了,原本下标为2的元素下标由2变为了1,由此而做了替死鬼,真是冤枉啊,真是的。所以,2未被删除,3就被删除了(更何况本身List的长度也在变化,长度影响遍历删除的次数,这里不赘述)。一直到for循环最后也依然阻止不了这场悲剧的发生( 该是幸运吧,总算有元素活下来了,但对于我们编代码的就要受罪了),以此类推。
我的解决方法是这样的:
考虑到元素下标每次都要减1变为0(其实,我错了,是元素下标隔1降1),何不如用两个变量来控制循环?我就给了两个变量i和j。i来控制循环次数,j来去除下标动态变化的条件,len解决list长度变化的问题。
代码如下:
for (int i = 0,j = 0,len = list.size(); i < len; i++) {
list.remove(j);
}
还有另一个“狗血”版本:
for (int i = 0,j = 0; i < list.size(); ) {
list.remove(j);
}
代码运行的结果是:
123456
--------
结果倒是正常输出了,可两个结果,怎么看怎么不好。
但最终他自己想到了最优化的代码。他优化后的代码如下:
for (int i = 0; i < list.size(); i++) {
list.remove(i--);
}
从这件小事可以看出,分享起作用了,他把这个问题分享给了我,我把我的想法分享给了他,而我们由共同由此解决了问题,找到了可行的答案。所以说,分享是一种好习惯。而且,我始终坚信,会分享、会帮助别人的人他注定会海纳百川,也会有更多的人会体会到分享的快乐。
转自:http://51wifygoo1go.blog.51cto.com/6455479/1123025
出现问题的代码是这样的(他的是javascript代码,我用java的List模拟):
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
System.out.println(""); //多的输出语句只是为了方便看运行结果。
System.out.println("------------------");
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+" ");
}
他原本想把所有的元素都给删除的,结果最后打印出来的结果是这样的,有些没有被删除掉:
123456
--------
246
看看,这结果很明显出问题了,对吧?本来想把所有的元素都给删除,结果竟然行事不果断,“斩草没有除掉根”,悲剧了,还剩下3个( 我竟然会想到斩草除根这个词,暗暗佩服自己。)。他一开始就思考到了问题的最根本原因,就是第二次删除的时候,原本下标为1的元素的下标就由1变为0了,原本下标为2的元素下标由2变为了1,由此而做了替死鬼,真是冤枉啊,真是的。所以,2未被删除,3就被删除了(更何况本身List的长度也在变化,长度影响遍历删除的次数,这里不赘述)。一直到for循环最后也依然阻止不了这场悲剧的发生( 该是幸运吧,总算有元素活下来了,但对于我们编代码的就要受罪了),以此类推。
我的解决方法是这样的:
考虑到元素下标每次都要减1变为0(其实,我错了,是元素下标隔1降1),何不如用两个变量来控制循环?我就给了两个变量i和j。i来控制循环次数,j来去除下标动态变化的条件,len解决list长度变化的问题。
代码如下:
for (int i = 0,j = 0,len = list.size(); i < len; i++) {
list.remove(j);
}
还有另一个“狗血”版本:
for (int i = 0,j = 0; i < list.size(); ) {
list.remove(j);
}
代码运行的结果是:
123456
--------
结果倒是正常输出了,可两个结果,怎么看怎么不好。
但最终他自己想到了最优化的代码。他优化后的代码如下:
for (int i = 0; i < list.size(); i++) {
list.remove(i--);
}
从这件小事可以看出,分享起作用了,他把这个问题分享给了我,我把我的想法分享给了他,而我们由共同由此解决了问题,找到了可行的答案。所以说,分享是一种好习惯。而且,我始终坚信,会分享、会帮助别人的人他注定会海纳百川,也会有更多的人会体会到分享的快乐。
转自:http://51wifygoo1go.blog.51cto.com/6455479/1123025
相关文章推荐
- 如何一次性删除List里的所有元素?
- Java中如何循环删除一个集合(如List)中的多个元素
- 如何正确遍历删除List中的元素,你会吗?
- 如何正确遍历删除List中的元素
- [置顶] C++中的list容器如何插入和删除第i个元素
- flex Array如何删除所有元素
- 如何一次性清除List里面所有内容(注意有Bug)
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- 如何在遍历list,vector,map时删除符合条件的元素
- Java中如何循环删除一个集合(如List)中的多个元素
- 如何不用 List.clear() 方法 就清空 list 中的 所有元素(中兴面试)
- 如何在遍历list,vector,map时删除符合条件的元素
- 如何正确遍历删除List中的元素,你会吗?
- Java如何在List或Map遍历过程中删除元素
- Java中如何循环删除一个集合(如List)中的多个元素
- jquery如何删除一个元素后面的所有元素
- 如何正确遍历删除List中的元素
- go语言坑之list删除所有元素
- 探究一下:如何删除一个list的元素?