本篇文章将学习到:

1. java.util.ConcurrentModificationException: null出现原因及解决办法(附带案例)

2. List的三种遍历方式

3. List的解析(新手向)

4.如何选择集合实现类


ConcurrentModificationException

出现问题

在使用List集合的时候出现了如下报错:

 定位代码:

出现原因

报错解释:“ConcurrentModificationException是基于java集合中的快速失败(fail-fast)机制产生的,在使用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了增删改,就会抛出该异常。”

当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationException的异常。

解决办法

  • 方法一:不要在增强for循环中增删数据
  • 方法二:使用索引(普通for循环)遍历。
  • 方法三:使用增强for循环遍历,增删操作使用迭代器实现。

List遍历的三种方法

  1. 使用普通for
  2. 使用增强for
  3. 使用iterator

代码实现:

public static void main(String[] args) {List  list = new ArrayList();// 添加元素 1-10for (int i = 1; i < 11;i++){list.add(i);}System.out.println(list);System.out.println("------------------------------------");// List遍历的三种方式//1. for循环System.out.println("====for循环遍历");for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}//2. 增强for循环System.out.println( );System.out.println("====增强for循环遍历");for (Object o : list) {System.out.print(o+" ");}//3. 迭代器System.out.println( );System.out.println("====迭代器遍历");Iterator iterator = list.iterator();while (iterator.hasNext()) {Object next = iterator.next();System.out.print(next+" ");}}

打印结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
------------------------------------
====for循环遍历
1 2 3 4 5 6 7 8 9 10 
====增强for循环遍历
1 2 3 4 5 6 7 8 9 10 
====迭代器遍历
1 2 3 4 5 6 7 8 9 10 

List的解析

集合主要是两组:单列集合 和 双列集合

collection接口有两个重要接口 List 和 Set,它们的实现子类是单列集合

List接口是Collection接口的子接口

  1. List接口类中元素有序(添加顺序和取出顺序一致),且可重复

  2. List集合中的每个元素都有其对应的顺序索引

  3. List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素

  4. JDK API 中List接口的实现类 AbstractList , AbstractSequentialList , ArrayList , AttributeList , CopyOnWriteArrayList , LinkedList , RoleList , RoleUnresolvedList , Stack , Vector

    主要类:ArrayList、LinkedList、Vector

如何选择集合的实现类

1. 先判断存储的类型(一组对象或一组键值对)
2. 一组对象Collection接口
       允许重复:List
             增删多:LinkedList(底层维护了一个双向链表)
             改查多:ArrayList(底层维护Object类型的可变数组)
           不允许重复:Set
             无序:HashSet(底层是HashMap,维护了一个哈希表,即数组+链表+红黑树)
             排序:TreeSet
             插入和取顺序一致:LinkedHashSet(维护数组+双向链表)

3.一组键值对Map
            键无序:HashMap(底层是:哈希表 jdk7:数组+链表  jdk8:数组+链表+红黑树)
            键排序:TreeMap
            键插入和取出顺序一样:LinkedHashMap
            读取文件:Properties

java.util.ConcurrentModificationException: null 报错解决相关推荐

  1. java.util.ConcurrentModificationException: null异常(已解决,原因出自于Java集合的快速失败机制)

    问题来源 今天我在写项目时,对集合中的元素做了以下操作 报错信息如图 问题来源: 在Java中对集合进行遍历时,一旦对集合进行增删操作,在遍历时会引起java.util.ConcurrentModif ...

  2. java.util.ConcurrentModificationException: null异常由for增强循环嵌套增删引起。

    问题: 在Java中对集合使用增强for循环时,一旦对集合进行增删操作,在遍历时会引起java.util.ConcurrentModificationException: null异常. 原因: 在官 ...

  3. java.util.ConcurrentModificationException异常原因及解决方法

    java.util.ConcurrentModificationException异常原因及解决方法 参考文章: (1)java.util.ConcurrentModificationExceptio ...

  4. 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException

    今天执行了一段<图解多线程设计模式>中的代码,结果抛出了如下的异常: Exception in thread "ReaderThread" java.util.Conc ...

  5. java 循环删除hashmap中的键值对,解决java.util.ConcurrentModificationException报错

    示例 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class DeleteHash ...

  6. 记录---ClassCastException: java.util.Date cannot be cast to java.sql.Date报错解决方法

    记录-ClassCastException: java.util.Date cannot be cast to java.sql.Date报错解决方法 先po代码: //1.读取配置文件中的基本信息I ...

  7. 出现 java.util.ConcurrentModificationException 时的解决办法

    for (int i=0; i<list.size(); i++) { // 只有在这种方式遍历集合时,同时对集合增加.删除才不会影响. // list.remove(list.get(i)); ...

  8. java.util.ConcurrentModificationException 解决办法

    在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除. 则使用会报以下异常: Java.util.ConcurrentModifi ...

  9. java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决

    java 带密码连接redis 单节点/集群 No reachable node in cluster报错解决 maven依赖 <dependency><groupId>red ...

  10. (转)Exception in thread main java.util.ConcurrentModificationException异常怎么解决?

    [转载原因:同样遇到set的foreach遍历中调用remove方法,导致这个错误.] [转载原文:https://blog.csdn.net/jdk_wangtaida/article/detail ...

最新文章

  1. 中文 Markdown 编写格式规范的命令行工具 lint-md
  2. python【蓝桥杯vip练习题库】ADV-17统计单词数
  3. url 编码 与 接口签名
  4. [雪峰磁针石博客]大数据Hadoop工具python教程9-Luigi工作流...
  5. 腾讯视频下载转mp4_腾讯视频如何上传自己的视频
  6. mybatis使用in语句作为查询条件
  7. ehcache缓存的详细配置
  8. 螳螂科技产研分享:做有生命力的SaaS产品架构
  9. 微博三方登陆-02.微博开放平台注册及使用
  10. TSINGSEE青犀视频开发人脸识别技术实现过程中的的难点汇总
  11. 【颜色科学】RGB和XYZ颜色空间的转换
  12. 护网笔记(三)-Windows基础、常用服务和入侵排查
  13. iMeta | 扬州大学杜予州团队揭示同域内同食物的两种昆虫肠道微生物群落装配机制...
  14. 基于java web 应用电子商务网站开发
  15. 解决 Agent JAR loaded but agent failed to initialize
  16. 让Windows 时间与Internet 时间服务器同步
  17. 服乔布斯不服库克,苹果传奇设计团队解散内幕曝光
  18. 【服务器】多人共享服务器用户管理
  19. 经典扫雷游戏【C语言】【详解】
  20. 使用预计算实时全局光照优化照明-教程目录

热门文章

  1. VS Code 下载、下载慢、更新(适用于压缩包下载)
  2. 一种绘制有向图的方法<TSE93> - 2. 最优层级分配
  3. java父类的称谓_《商周金文中的血缘关系称谓》
  4. 鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)
  5. “The file being opened for reading does not exist“-HyperMesh
  6. python中的数学函数汇总
  7. 固态硬盘与机械硬盘数据迁移
  8. 永久免费的数据库防火墙(堡垒机)
  9. 数据安全--11--数据安全政策文件体系
  10. bootloader介绍