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

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值