一: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. win8.1怎么安装iis

    进入系统后,在左下角处点鼠标右键,再点击[程序和功能]如下图所示:       2 进入程序和功能界面后,点击[启用或关闭Windows功能] 在WINDOWS功能对话框中找到[internet in ...

  2. 一文理解JS的节流、防抖及使用场景

    函数防抖(debounce):在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时. 看一个

  3. p2p项目工具类

    1.用于存放当前用户的上下文UserContext package com.xmg.p2p.base.util; import javax.servlet.http.HttpSession; impo ...

  4. Java XML SAX 解析注意

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4002738.html 什么时候可以把解析值赋给对象 一般从网 ...

  5. redis 数据淘汰策略与配置

    redis 数据淘汰策略 volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰volatile-random:从 ...

  6. maven 结合mybaits整合框架,打包时mapper.xml文件,mapper目录打不进war包去问题

    首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...

  7. DROP语句总结

    一.基本语句 通过使用 DROP 语句,可以轻松地删除索引.表和数据库.  1.DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. <!--用于 MS Access 的 ...

  8. asp.net中的<%%>的使用

    在asp.net中常见的<%%>方式有如下几种: <%%>.<%=%>.<%:%>.<%#%>.<%$%>.<%@%> ...

  9. [翻译] JKLLockScreenViewController

    JKLLockScreenViewController https://github.com/tiny2n/JKLLockScreenViewController Overview It is Loc ...

  10. 点击单个cell高度变化的动画效果

    点击单个cell高度变化的动画效果 效果 说明 1. 点击单个cell的时候,其展开与缩放动画实现起来是很麻烦的,做过相关需求的朋友一定知道其中的坑 2. 本例子只是提供了一个解决方案,为了简化操作, ...