`

从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的原理?

相关推荐

    在Python中操作列表之List.pop()方法的使用

    obj — 这是一个可选参数,该对象的索引可以从该列表中删除 返回值 此方法返回从列表中移除对象 例子 下面的例子显示了pop()方法的使用 #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc']; print A List : ,...

    Redis操作命令总结

    6. **lrem key count value**: 从列表中移除指定数量的值。 7. **ltrim key start stop**: 截断列表,只保留指定范围内的元素。 Redis 的链表操作使得它既可以用作栈,也可以用作队列。此外,`lpush` 和 `rpush` ...

    用C++实现数据结构中的各种算法

    - `Pop()`:从堆中移除最小元素。 - `Top()`:获取堆顶元素但不移除。 - `Heapify()`:调整堆的结构以保持性质。 #### 十五、哈夫曼树 **15.1 哈夫曼树(BinTreeNode.h, BinaryTree.h, MinHeap.h, Huffman.h, ...

    饭店点菜系统

    - 如果某项被选中,则将其添加到`List2`中,并从`List1`中移除该项。 3. **菜品移除逻辑**: - 类似地,在`Command2_Click`事件中,循环遍历`List2`中的所有项。 - 如果某项被选中,则将其移回`List1`并从`List2...

    java utils 工具类

    - `StreamUtil.filterNull(stream)`:从流中移除所有`null`值。 - `StreamUtil.limit(stream, maxElements)`:限制流中的元素数量不超过指定值。 3. **合并与连接**: - `StreamUtil.concat(stream1, stream2)`...

    JAVA初学教程教你学会JAVA4

    - `remove(int index)`: 允许从列表中移除指定位置的元素。 - `set(int index, Object element)`: 允许替换列表中指定位置的元素。 通过覆盖这些方法,可以扩展列表的功能,使其支持更多的操作。 ##### 3. 实用...

    C#选号系统

    创建Random对象时,通常会传递一个种子值(可选)以确定随机数序列的起始点。如果不提供种子,系统将自动使用当前时间作为种子,确保每次运行时都能得到不同的随机数序列。 创建选号系统的第一步是实例化Random对象...

    redis基本命令大全

    - `ZRANGE key start stop [WITHSCORES]`:返回有序集合 `key` 中指定范围的成员,可选地带上分数。 - `ZREVRANGE key start stop [WITHSCORES]`:返回有序集合 `key` 中指定范围的成员,按分数降序排列。 9. **...

    Todo-List:JS TodoList

    在Web开发中,这样的Todo List是一个经典的案例,它可以帮助初学者理解DOM操作、事件处理以及数据管理等核心概念。 【描述】"待办事项清单 JS TodoList" 提示我们这个项目主要是关于创建一个可以添加、删除和管理...

    管理系统中计算机应用FOXPRO教程.pdf

    2. **向数据库添加/删除数据表**:`ADD TABLE`将数据表添加到数据库,`REMOVE TABLE`将其从数据库中移除,可选的`DELETE`子句决定是否从磁盘删除文件。 3. **建立视图**:通过`CREATE SQL VIEW`结合`SELECT`语句创建...

    Android 长按Listview删除一行

    `deleteItem()`方法负责从数据源(如ArrayList)中移除指定位置的元素,并通知Adapter数据集已改变。Adapter通常需要提供一个`remove()`或`delete()`方法来实现这个功能: ```java public void deleteItem(int ...

    hibernate 中文帮助文档 api

    - **删除(Delete)**:从数据库中移除对应的记录。 - **加载(Load)**:根据主键获取实体,如果不在缓存中则从数据库查询。 - **查询(Query)**:使用HQL(Hibernate Query Language)或Criteria API进行复杂...

    Vue拖拽组件列表实现动态页面配置功能

    `deleteItem`方法接收索引参数,用于从`list2`中移除对应的组件。 此外,还需要注意的是,`vuedraggable`提供了`@start`、`@end`等事件,可以用来在拖放开始和结束时执行额外的操作,例如禁用其他交互或提供反馈。 ...

    react-使用React实现的todolist

    3. **删除任务**:同样在`TodoItem`组件内,可以添加一个删除按钮,点击时触发删除任务的逻辑,通过回调函数将任务ID传递给`TodoList`,然后从任务列表中移除相应的任务。 **三、状态管理** 1. **useState Hook**...

    ListView+CheckBox UI 完美版。实现 全选 、 全不选 、 删除等功能.zip

    在Android开发中,ListView是展示大量数据的一种常见视图组件,它可以滚动并显示多个行,每行通常包含多个元素。本教程将深入讲解如何在ListView中集成CheckBox,并实现全选、全不选以及删除功能。这是一项基础但...

    Recyclerview实现多选功能

    2. 遍历这些位置,从数据源中移除对应的条目,然后调用Adapter的`notifyDataSetChanged`更新列表。 3. 清空`selectedItems`,关闭PopupWindow。 六、优化用户体验 1. 添加动画效果,如选中时的背景色变化,未选中时...

    hibernate的配置使用和各种查询

    - 当一个对象从`Session`中移除后,它进入游离状态。 - 游离状态下的对象仍然保留其数据,但失去了与`Session`的关联。 #### 五、实体映射配置示例 以下示例展示了如何配置员工(Employee)与账户(Account)...

    Virtualbox命令详解

    - `unregistervm`: 从虚拟机列表中移除指定的虚拟机。 - 可选参数: - `-delete`: 删除指定的虚拟机。 ##### 8. 创建虚拟机 - **命令**: `VBoxManage createvm -name &lt;name&gt;` - **描述**: - `-name`: 指定新...

Global site tag (gtag.js) - Google Analytics