从List中移除指定 List 中包含的其所有元素(可选操作)。_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 从List中移除指定 List 中包含的其所有元素(可选操作)。

从List中移除指定 List 中包含的其所有元素(可选操作)。

 2013/7/24 15:40:59  qi_ling2005  程序员俱乐部  我要评论(0)
  • 摘要:从List中移除指定List中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀于是我就写了如下代码:List<String>l=...;List<String>list=....;for(inti=0;i<l.length;i++){Strings=l.get(i);if(list.contains(s)){l.remove(s);}}因为两个list读取的文件,运行后看着没什么错
  • 标签:list 操作

从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();
      }
    }

?

发表评论
用户名: 匿名