文档章节

记一次集合类遍历操作中删除多个集合元素

 郭里奥
发布于 2017/09/11 18:56
字数 420
阅读 4
收藏 0
点赞 0
评论 0

在操作集合List时,需要删除多个满足指定条件的元素。

1.使用forEach()

int size = 10;
List<Integer> list = new ArrayList<Integer>();
//使用for循环为10个元素赋值
for(int i = 0 ; i < size ; i++)
  list.add(i);
//使用forEach打印元素内容
for(Integer each : list ){
  System.out.print(each+"\t");
}
//结果是0		1		2		3		4		5		6		7		8		9
使用forEach打印正常。这次使用forEach将是偶数的元素移除。
for(Integer each : list){		
  //位运算
  if((each&1) == 0){
     //使用List自带的remove方法
     //结果是在remove()时抛出java.util.ConcurrentModificationException异常
     list.remove(each);
  }
}

经过查看资料发现forEach循环的内部使用了Iterator进行了操作。详见此处

在使用.next()方法之前都会判断size,和最初的的size是否相等,否则抛出异常。

2.使用传统for循环

for(int i = 0 ; i <list.size(); i++){
  if((list.get(i)&1) == 0){
    list.remove(list.get(i));
    i -= 1; //在移除i位置元素时,会将后面的数据先前依次移动,应该继续判断该下标的值
  }
}
结论:可以正确删除指定的元素

3.使用Iterator

Iterator<Integer> iter = list.iterator();
Integer temp ;
while(iter.hasNext()){
  temp = iter.next();
  if((temp&1) == 0){

    //此处使用Iterator的remove()方法
    iter.remove();

    /*
    使用list的remove依然会抛出异常java.util.ConcurrentModificationException
    list.remove(temp);
    */
  }
}

删除前:0    1    2    3    4    5    6    7    8    9

删除后:1    3    5    7    9

建议:在对集合类进行操作时,如果只是遍历,使用forEach会使代码更加简洁。如果在遍历过程中要进行改变size的操作或得到索引的操作建议使用传统for循环或者iterator进行操作。

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 14
码字总数 6901
作品 0
西安
程序员
Java中Collection和Iterator接口

1.Collection接口是List、Set和Queue接口的父接口,该接口里面定义方法即可用与操作Set集合,也用于操作List和Queue集合。Collection接口里面定义一些操作集合元素的方法。boolean add(Obj...

西红柿的眼泪
2016/07/13
15
0
【JavaSE(九)】Java集合框架(上)

原文地址:https://www.cloudcrossing.xyz/post/41/ 1 对象数组 数组既可以存储基本数据类型,也可以存储引用类型。它存储引用类型时的数组就叫对象数组。 举个例子:我有5个学生,请把这个5...

苍云横渡
05/24
0
0
Java集合框架总结(4)——List接口的使用

List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。 1、List接口和ListIterator接口 List作为Collection接...

dong.li
2012/04/24
0
1
Java 集合框架_List

Java 集合框架系列 Java 集合框架开篇 Java 集合框架List Java 集合框架ArrayList Java 集合框架LinkedList 上一章讲述了顶层接口Collection以及抽样类AbstractCollection。但是Collection接...

wo883721
2017/12/20
0
0
Map、Set、List集合差别及联系详解

         一、集合   集合类存放于java.util包中。   集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。  ...

Romane
06/05
0
0
Redis探索之旅(9)- Redis数据类型之集合类型

在本文,我将对Redis中的集合类型进行说明,包含都支持什么操作以及一些需要注意的地方。 集合本身就有一些操作,如插入,删除等,但是集合之间还是有所关系的,集合之间的运算按理说也应该被...

andamajing
2016/09/04
0
0
javascript(十三) DOM的增删查改

javascript(十三) DOM的增删查改 DOM1老版本下的增删查改: 最老版本DOM修改基本是借助DOM集合进行操作,这个版本称为DOM1: DOM的集合有表单集合,图片集合,链接,描点集合。就用连接集合...

年少爱追梦
2016/06/04
147
0
Java 集合框架_开篇

Java 集合框架系列 Java 集合框架开篇 Java 集合框架List Java 集合框架ArrayList Java 集合框架LinkedList Java有三大工具类框架非常值得我们学习,java集合框架,java并发框架,以及java ...

wo883721
2017/12/20
0
0
Java集合框架(一)——集合概述

本文概述 本篇文章将分三块内容对Java中的集合框架进行介绍: 一. 集合框架相关概念 二. 集合体系通用方法 三. 集合遍历—Iteractor 一. 集合框架相关概念 集合:用于存储多个对象的容器 1....

Mr_Yanger
2017/11/11
0
0
【Java小收获】List一次删除多个元素

正文之前 今天还在执着的肝论文,EADC这个理论上的简单算法, 我活活肝了三天,虽然大部分时间在划水,但是也可见我真是个渣渣,今天遇到一个小问题。那就是如何在List中一次删除多个元素?因...

HustWolf
05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python以太坊类库web3.py概览

python通过web3.py库与以太坊交互共同入口是web3对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers使...

智能合约
5分钟前
0
0
【Android学习笔记】设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg。 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: >>>阅读全文

全部原谅
6分钟前
0
0
什么是React-redux、为什么使用React-redux、怎么使用React-redux

1、什么是React-redux React-redux是用于连接React和Redux的 2、为什么使用React-redux 使用React-redux可以使redux部分代码更简洁更明了,比如组建中需要使用到的数据都在mapStateToProps方...

kimyeongnam
9分钟前
0
0
Spring核心——Stereotype组件与Bean扫描

在注解自动装载中介绍了通过注解(Annotation)自动向Bean中注入其他Bean的方法,本篇将介绍通过注解(Annotation)向容器添加Bean的方法。 Spring的核心容器提供了@Component和@Bean注解来标...

随风溜达的向日葵
9分钟前
0
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

猫咪编程
12分钟前
0
0
flink fold example

flink fold例子 import org.apache.flink.api.common.functions.*;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.S......

coord
14分钟前
0
0
c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
18分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
18分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
19分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部