`

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

    博客分类:
  • java
阅读更多

从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
5
分享到:
评论
4 楼 qi_ling2005 2013-11-26  
liangcoder 写道
建议使用Iterator安全移除Collection中的元素。
否则可能会遭遇ArrayIndexOutOfBoundsException, ConcurrentModificationException.


谢谢
3 楼 qi_ling2005 2013-11-26  
fireaap 写道
帅锅,你要表达什么?
你写的方法比removeAll好用?还是removeAll的原理?


只是做记录
2 楼 liangcoder 2013-07-24  
建议使用Iterator安全移除Collection中的元素。
否则可能会遭遇ArrayIndexOutOfBoundsException, ConcurrentModificationException.
1 楼 fireaap 2013-07-24  
帅锅,你要表达什么?
你写的方法比removeAll好用?还是removeAll的原理?

相关推荐

    【Robotframework】列表List的常用操作.pdf

    使⽤log: log ${string} 以下关于list的操作类关键字,是在collections库中的,使⽤前,需要引⼊该库 2 Append To List-为list追加数据 ⽐如create list中的⽰例,也可以使⽤: # 新建⼀个list变量 @{list} create ...

    使用python list 查找所有匹配元素的位置实例

    如下所示: import re word = test s = test abcdas test 1234 testcase testsuite ... 您可能感兴趣的文章:Python 查找list中的某个元素的所有的下标方法python 获取list特定元素下标的实例讲解python

    python 寻找list中最大元素对应的索引方法

    以上这篇python 寻找list中最大元素对应的索引方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法...

    数组,List 重复元素统计数量,找出唯一的元素

    int[] arr = { 1, 2, 2, 3, 3, 4, 4, 4, 1, 5, 6, 6, 6 }; 两种不同方式(使用map和list两种方式)获得一下输出结果 数组和list 可以使用相同的方法,自己测试可以 控制台输出 ...数组中唯一的元素是:5

    java获取list中两元素时间差

    java获取list中两元素时间差

    list 元素循环比较

    list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较list 元素循环比较

    Python 查看list中是否含有某元素的方法

    用关键字 in 和not in 来 ... 您可能感兴趣的文章:python list是否包含另一个list所有元素的实例Python判断两个list是否是父子集关系的实例python对list中的每个元素进行某种操作的方法Python之list对应元素求和的方法

    std::List类的遍历获得元素的操作二法

    std::list没有[]函数或Get()函数,又不能总是front()的方式排出,如何遍历获得其中的元素呢?比如 遍历显示元素内容为例 ,用两种方式实现。

    Python基础教程:两种方法获取list中指定元素的索引.pdf

    Python基础教程:两种⽅法获取list中指定元素的索引 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达⽬的地最近的车站,橱窗⾥⾯最贵的物品等 等。 ⽅法⼀: 利⽤数组⾃⾝的特性 list.index...

    Python list列表中删除多个重复元素操作示例

    本文实例讲述了Python list列表中删除多个重复元素操作。分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) ...

    C# 修改list所有对象中的某字段

    C# 修改list所有对象中的某字段 博客地址:https://blog.csdn.net/qq_36051316/article/details/83475372 的案例

    C#查找列表中所有重复出现元素的方法

    主要介绍了C#查找列表中所有重复出现元素的方法,涉及C#针对列表操作的技巧,非常具有实用价值,需要的朋友可以参考下

    C#list集合按元素出现次数排序取值(含去重功能)

    此文件搭配本人发表的文章:C#list集合按元素出现次数排序取值(含去重功能),资源完全免费下载,不收取任何费用,纯粹的技术交流。联系方式在文章中有,喜欢的朋友们可以互相交流一下。

    浅谈C#中ListT对象的深度拷贝问题

    一、List对象中的T是值类型的情况(int 类型等)...1、对于引用类型的List无法用以上方法进行复制,只会复制List中对象的引用,可以用以下扩展方法复制: static class Extensions { public static IList&lt;T&gt; Clone(t

    C#遍历List并删除某个元素的方法

    主要介绍了C#遍历List并删除某个元素的方法,实例分析了正序与倒序遍历list及删除元素的使用技巧,需要的朋友可以参考下

    Python 查找list中的某个元素的所有的下标方法

    如下所示: #!/usr/bin/env python #_*_ coding:utf-8 _*_ name = ['hello', 'world', 'a', '... new_list = name[first_pos:] next_pos = new_list.index(2) + 1 print 'find ', first_pos + new_list.index(2) fi

    Python判断一个list中是否包含另一个list全部元素的方法分析

    本文实例讲述了Python判断一个list中是否包含另一个list全部元素的方法。分享给大家供大家参考,具体如下: 你可以用for in循环+in来判断 #!/usr/bin/env python # coding: utf-8 a = [1, 2, 3, 4, 5] b = [3, 4, 5...

    js模拟list和map

    java中的 List,Map js文件为 js/utils.js IE6.0 测试通过 &lt;br&gt;List: add(var obj) //添加一个元素 remove(var index) //删除一个元素 get(var index) //获取一个元素 removeAll() //删除所有...

    list嵌套list例子

    list嵌套list,可以直接运行,其实就是事件拦截

    javaScript如何处理从java后台返回的list

    事情: 从java后台返回List类型数据,用于界面显示。但js中想获取它并操作它。直接使用EL表达式,js把它识别成字符串了。不是我想要的啊。。网上搜了搜大家的解决方案…最好的当然是把List集合转成json格式传到界面...

Global site tag (gtag.js) - Google Analytics