从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀
于是我就写了如下代码:
class="java" name="code">List<String> l = ...; List<String> list = ....; for(int i=0;i<l.length;i++){ String s = l.get(i); if(list.contains(s)){ l.remove(s); } }
?因为两个list读取的文件,运行后看着没什么错,后来无聊用了removeAll,发现结果不一样。
看代码没什么问题呀,后来经过反复实验,终于发现原来:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。
解决方法:
在remove掉一个元素后,把i减1,代码如下:
List<String> l = ...; List<String> list = ....; for(int i=0;i<l.length;i++){ String s = l.get(i); if(list.contains(s)){ l.remove(s); i--; } }
?百度之后又发现另外两种方法:
1、倒过来遍历list
List<String> l = ...; List<String> list = ....; for(int i=l.length;i>=0;i--){ String s = l.get(i); if(list.contains(s)){ l.remove(s); } }
?
2、使用iterator.remove()方法删除
List<String> l = ...; List<String> list = ....; for (Iterator it = list.iterator(); it.hasNext();) { String s = (String)it.next(); if (list.contains(s)){ it.remove(); } }
?