欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 22:07:46
...

从List中移除指定 List 中包含的其所有元素,这个当然用List里面的removeAll方法了,但是有朋友说能不能不用removeAll呀
于是我就写了如下代码:

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

 

相关标签: java List remove