删除JAVA集合中元素的实现代码
经常我们要删除集合中的某些元素。有些可能会这么写。
public void operate(List list){
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
list.remove(str);
}
}
}
这种写法一运行就会报如下异常:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
因为list在循环中的时候是不可以删除它的元素的。后来我是这样做的,一种很笨的方法,思路是这样的:创建一个List专门存放要被删除的元素,循环过后,用List.removeAll方法把元素删除。代码如下:
public void operate(List list){
List removeList= new ArrayList();
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
removeList.add(str);
}
}
list.removeAll(removeList);
}
这样也确实可以解决问题了,但是方法实在太笨重,其实可以有更简单的更高效的方法,就是用Iterator.remove方法,如下:
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
所以,你对Java的基础知识了解越多,代码就会写得越简洁。相反如果你的代码特别复杂,则方法或设计一定有问题。
相关推荐
-
实现Java删除一个集合的多个元素
问题 我需要从一个java的集合中,根据另一个集合的内容,删除第一个集合中不特定的元素.这看上去非常简单,但却遇到了问题. 这是我要写的方法的头部 private void screenBlackNameList(List<SharedBoardSmsWrapper> source, List<BlackNameListModel> blackNameList) 事情是这样子的.source集合中保存了一些显示用的数据元素.blackNameList集合中保存的是黑名单列表.我们需
-
ArrayList删除集合中某一属性相同的元素方法(推荐)
如果想要集合中的元素不会有重复,那么推荐使用hashSet,如下: // list是有重复元素的ArrayList HashSet hSet = new HashSet(list); list.clear(); list.addAll(hSet); 但是有时我们想删除某一个重复属性值(值相同)的某个元素,如下: NetWork nw1 = new NetWork(); nw1.id = 1; nw1.destip = "192.168.1.3"; NetWork nw2 = new N
-
java集合类arraylist循环中删除特定元素的方法
在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } } 上面这种方式会抛出如下异常: Exception in thread "main" java.lang.I
-
删除JAVA集合中元素的实现代码
经常我们要删除集合中的某些元素.有些可能会这么写. 复制代码 代码如下: public void operate(List list){ for (Iterator it = list.iterator(); it.hasNext();) { String str = (String)it.next(); if (str.equals("chengang")){ list.remove(str); } } } 这种写法一运行就会报如下异常: Exception in thread &q
-
java集合中list的用法代码示例
List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列. List可以精确的控制每个元素的插入位置,或删除某个位置元素,它的实现类ArrayList底层是由数组实现的. List中有增删改查的方法,我们可以通过例子演示: 我们通过对学生选课,来演示List中对课程增删改查的方法 /** * 课程类 * @author lenovo * */ public class KeCheng { publ
-
java中循环遍历删除List和Set集合中元素的方法(推荐)
今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录如下: 错误代码的写法,也就是报出上面异常的写法: Set<CheckWork> set = this.getUserDao().getAll(qf).get(0).getActionCheckWorks(); for(CheckWork checkWork : set){ if(checkWor
-
Java链表中元素删除的实现方法详解【只删除一个元素情况】
本文实例讲述了Java链表中元素删除的实现方法.分享给大家供大家参考,具体如下: 该部分与上一节是息息相关的,关于如何在链表中删除元素,我们一步一步来分析: 一.图示删除逻辑 假设我们需要在链表中删除索引为2位置的元素,此时链表结构为: 若要删除索引为2位置的元素,需要获取索引为2位置的元素之前的前置节点(此时为索引为1的位置的元素),因此我们需要设计一个变量prev来记录前置节点. 1.初始时变量prev指向虚拟头结点dummyHead: 2.寻找到前置节点位置,(对于该例子前置节点为索引为1
-
java集合中的list详解
1.List接口 该接口定义的元素是有序的且可重复的.相当于数学里面的数列,有序可重复 booleanaddAll(intindex,Collection<?extendsE>c);将指定集合中所有元素,插入至本集合第index个元素之后defaultvoidreplaceAll(UnaryOperatoroperator);替换集合中每一个元素值defaultvoidsort(Comparator<?superE>c);给集合中的元素进行排序Eget(intindex);获取集合
-
Java集合中的fail-fast(快速失败)机制详解
简介 我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的, 因此如果在使用迭代器的过程中有其他线程修改了list,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略. 这一策略在源码中的实现是通过 modCount 域,modCount 顾名思义就是修改次数,对ArrayList 内容的修改都将增加这个值,那么在迭代器初始化过程中会将这个值赋给迭代器的 exp
-
基于java集合中的一些易混淆的知识点(详解)
(一) collection和collections 这两者均位于java.util包下,不同的是: collection是一个集合接口,有ListSet等常见的子接口,是集合框架图的第一个节点,,提供了对集合对象进行基本操作的一系列方法. 常见的方法有: boolean add(E e) 往容器中添加元素:int size() 返回collection的元素数:boolean isEmpty() 判断此容器是否为空: boolean contains(Object o) 如果此collecti
-
Java语言中的内存泄露代码详解
Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存.理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同. JAVA中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的. 在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上. 下面看一个示例: public class Simple { public static vo
-
Java 集合中关于Iterator和ListIterator的用法说明
1.Iterator Iterator的定义如下: public interface Iterator<E> {} Iterator是一个接口,它是集合的迭代器.集合可以通过Iterator去遍历集合中的元素.Iterator提供的API接口如下: forEachRemaining(Consumer<? super E> action):为每个剩余元素执行给定的操作,直到所有的元素都已经被处理或行动将抛出一个异常 hasNext():如果迭代器中还有元素,则返回true. next
-
Java集合中contains方法的效率对比分析
最近让部门技术大佬帮忙代码review的时候,他给我指出了一个小的技术细节,就是对于集合的contains方法尽量选用Set而不是List,平时没怎么注意,仔细看了下源码,大佬就是大佬,技术细节也把握的死死的. Java集合List.Set中均有对集合中元素是否存在的判断方法contains(Object o):Map中有对key及value是否存在的判断方法containsKey(Object key)和containsValue(Object value). 1.ArrayList 在Arr
随机推荐
- 正则表达式验证身份证号码和邮箱、判断checked选中状态
- JS、CSS加载中的小问题探讨
- dos 流程跳转 goto
- Node.js操作mysql数据库增删改查
- JS实现图片上传预览功能
- JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
- Python简单操作sqlite3的方法示例
- 详解在Docker容器中运行Spring Boot应用
- win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
- MSSQL 监控数据/日志文件增长实现方法
- javascript HTML+CSS实现经典橙色导航菜单
- Lua table中安全移除元素的方法
- jquery中dom操作和事件的实例学习-表单验证
- 使用jQuery判断Div是否在可视区域的方法 判断div是否可见
- MyIM聊天软件全接触——手把手教你玩转MyIM
- java为移动端写接口开发实例
- 在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
- php实现比较两个文件夹异同的方法
- vue 进阶之实现父子组件间的传值
- 一步一步跟我学易语言之子程序指针