一: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并发异常处理的更多相关文章

  1. 集合和Iterator迭代器

    集合 集合是java中提供的一种容器,可以用来存储多个数据. 注意: ①.集合只能存放对象.比如你存一个 int 型数据 1放入集合中, 其实它是自动转换成 Integer 类后存入的,Java中每一 ...

  2. 15.Colection集合和Iterator接口.md

    目录 1.Collection 1.1概念 1.1遍历方法-Lambda表达式 1.2遍历方法-Iterator接口 1.3使用Lambda方法遍历Iterator接口 1.4使用Foreach方法遍 ...

  3. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  4. Java集合的实现细节—Set集合和Map集合

    Set:代表无序.不可重复的集合 Map:代表key-value对集合,也称为关联数组 从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展. 1.Set集合和Map集合的 ...

  5. java基础33 Set集合下的HashSet集合和TreeSet集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  6. quartz集群分布式(并发)部署解决方案-Spring

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

  7. 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

  8. 【读书笔记】【深入理解ES6】#7-Set集合和Map集合

    ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...

  9. quartz集群分布式(并发)部署解决方案

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

随机推荐

  1. 在element-ui的el-tree组件中用render函数生成el-button

    本文主要介绍怎么在el-tree组件中通过render函数来el-button. 这是element-ui中el-tree树: 这是需要实现的效果: tree.vue文件中,具体实现的代码如下: &l ...

  2. 阿里云 CentOS7安装redis4.0.9并开启远程访问

    1 安装redis编译的c环境 yum install gcc-c++ redis是c语言开发的,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境. 如果没有gcc环境,需要安装gcc ...

  3. Matlab给三维点云添加高斯噪声和随机噪声

    写在前面 在我们进行点云配准一类的模拟实验时,第一步就是对原始点云进行适当的RT变换,并添加一定的噪声,得到测量点云,然后才可以用我们的算法去进行后面的配准操作.在添加噪声这一块,matlab里并没有 ...

  4. Python3 循环语句

    Python3 循环语句 转来的  很适合小白   感谢作者   Python中的循环语句有 for 和 while. Python循环语句的控制结构图如下所示: while 循环 Python中wh ...

  5. svn 同步资源库时忽略某些文件类型和文件夹

    项目开发中,开发人员经常用SVN来管理代码,在和服务器同步时,每次都看到一堆.class,.log,target等文件,这样很不舒服. 解决方法: 打开:window-->preferences ...

  6. CSS 内外边距 float positio属性

    一.外边距和内边 margin:            用于控制元素与元素之间的距离 外边距:margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的. padding:   ...

  7. CentOS6.5安装vncserver实现图形化访问

    一. 安装gnome图形化桌面 #yum groupinstall -y "X Window System" #yum groupinstall -y "Desktop& ...

  8. Ubuntu 16.04 c++ Google框架单元测试

    环境:Ubuntu 16.04 在github网站上下载gtest框架:终端输入git clone https://github.com/google/googletest.git 然后找到 gool ...

  9. 软工读书笔记 week 6 ——《疯狂的程序员》Part 1

    这本小说以主人公绝影上大学后初次接触编程开始讲起,这周主要看的就是绝影还在大学的那段经历,虽然故事背景很多年前,但很多地方仍然会引发我的共鸣. 第一个梦想 在“第一个梦想”一节讲了作业布置做一个通讯录 ...

  10. react实例:理解dva构建项目的原理

    请点击相应的步骤查看详情 我们首先搭建一个 dva Demo  项目(请参考react快速构建一个应用项目),然后逐步完成以下内容: 结构划分 设计 Model 组件设计方法 组件设计实践 添加 Re ...