List集合和iterator并发异常处理
一:List接口:
子类:ArrayList LinkedList
特点:Unlike sets, lists typically allow duplicate elements.不像set集合,List集合允许元素重复。
The List interface provides four methods for positional (indexed) access to list elements. Lists (like Java arrays) are zero based. List集合提供一些关于索引的访问元素的方法,和数组一样起始索引:0;
也就是说List集合是存取是有序的。比如存:11,12,13.取元素也是11,12,13.
List集合比对2个对象使用equals()比较。
也就是说之前Collection的方法,我们可以用精确的索引来操作。
package test09; import java.util.ArrayList;
import java.util.List; public class List_Demo {
public static void main(String...args){
list_test();
}
public static void list_test(){
List<Integer> li_te=new ArrayList<>();
li_te.add();
li_te.add();
li_te.add();
li_te.add();
li_te.add();
li_te.add(,);//指定位置添加元素。
System.out.print(li_te);
li_te.remove();//指定位置删除元素。
System.out.print(li_te);
Integer get_el=li_te.get();
System.out.print(get_el);//指定位置获取元素,如果超出索引报错误:IndexOutOfBoundsException
li_te.set(,);//replace替换指定位置的元素。
System.out.print(li_te);
for(Integer i=;i<li_te.size();i++){
System.out.print(li_te.get(i));//使用索引进行迭代。
}
}
}
二:迭代器Iterator并发异常处理:
看如下代码:
package test09; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class List_It {
public static void main(String...args){
op_It();
}
public static void op_It(){
List<String> str_list=new ArrayList<>();
str_list.add("i");
str_list.add("b");
str_list.add("n");
str_list.add("m");
Iterator<String> str_it=str_list.iterator();
while (str_it.hasNext()){
String test_str=str_it.next();
if (test_str.equals("m")){
str_list.add("k");
}
}
}
}
报如下的错误:
Exception in thread "main" java.util.ConcurrentModificationException
这是为什么呢?
这是因为在我们使用迭代器Iterator的时候,同时对集合元素进行操作,但是迭代器并不知道集合发生变化,所以抛出如上的错误。
解决方法:解决并发引起的错误,在迭代的集合元素的时候,不要进行相关的元素操作。
或者使用listiterator方法。
ListIterator<E>
listIterator()
将如上的代码进行修改:
package test09; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class List_It {
public static void main(String...args){
op_It();
}
public static void op_It(){
List<String> str_list=new ArrayList<>();
str_list.add("i");
str_list.add("b");
str_list.add("n");
str_list.add("m");
ListIterator<String> str_it=str_list.listIterator();
while (str_it.hasNext()){
if(str_it.next().equals("m")){
str_it.add("");
}
}
System.out.print(str_list);
}
}
在迭代的过程中,如果不想不引起并发异常,可以使用ListIterator迭代器,在迭代的过程对数组的修改。只有List有这特性,因为List有索引。
List集合和iterator并发异常处理的更多相关文章
- 集合和Iterator迭代器
集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...
- 15.Colection集合和Iterator接口.md
目录 1.Collection 1.1概念 1.1遍历方法-Lambda表达式 1.2遍历方法-Iterator接口 1.3使用Lambda方法遍历Iterator接口 1.4使用Foreach方法遍 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- Java集合的实现细节—Set集合和Map集合
Set:代表无序.不可重复的集合 Map:代表key-value对集合,也称为关联数组 从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展. 1.Set集合和Map集合的 ...
- java基础33 Set集合下的HashSet集合和TreeSet集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- quartz集群分布式(并发)部署解决方案-Spring
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
- 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq
5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...
- 【读书笔记】【深入理解ES6】#7-Set集合和Map集合
ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...
- quartz集群分布式(并发)部署解决方案
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
随机推荐
- css3 3d正反面翻转
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Android 退出整个应用程序
我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序,没有释放 ...
- Django基础三之视图函数
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- [AngularJS] “路由”的定义概念、使用详解——AngularJS学习资料教程
这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 AngularJS“路由”的定义概念 AngularJS最近真的很火,很多同事啊同学 ...
- input文字垂直居中和按钮对齐问题,兼容IE8
1.盒子模型问题:请CSS重置 2.按钮不对齐:请浮动或者vertical-align:middle;然后计算宽高,使其对齐 : 3.IE8文本不居中:line-height属性 注意:IE8 ...
- HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试
No1. 必须搭建java环境 只需要最基础的java环境,也就是cmd下可以运行java和javac即可, 具体教程请自行百度,都会有很详细的教程,这里不重点介绍. No2. 下载安装HBuilde ...
- 记ASP.NET 使用 X509Certificate2 出现的一系列问题
在做微信支付退款的时候,由于需要使用到p12证书,结果就遇到一系列的坑.这里做个记录方便以后查阅. 原先加载证书的代码: X509Certificate2 cert = new X509Certifi ...
- CRM Online Outlook Client Configuration Wizard
CRM Outlook客户端满足和便捷了用户对office outlook和CRM两个程序的使用需求.通过CRM outlook 客户端,用户可以像在浏览器中访问CRM一样,流畅的读写CRM数据.同时 ...
- Android 获取全局Context的技巧
回想这么久以来我们所学的内容,你会发现有很多地方都需要用到Context,弹出Toast的时候需要.启动活动的时候需要.发送广播的时候需要.操作数据库的时候需要.使用通知的时候需要等等等等.或许目前你 ...
- lodop 代码注释
LODOP.SET_PRINT_PAGESIZE(1,1000,1500,""); /*1,纵向输出;1000,宽度;1500,高度*:单位为0.1毫米/LODOP.ADD_PR ...