本篇文章将学习到:
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遍历的三种方法
- 使用普通for
- 使用增强for
- 使用iterator
代码实现:
public static void main(String[] args) {
List list = new ArrayList();
// 添加元素 1-10
for (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接口的子接口
-
List接口类中元素有序(添加顺序和取出顺序一致),且可重复
-
List集合中的每个元素都有其对应的顺序索引
-
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
-
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(维护数组+双向链表)文章来源:https://www.toymoban.com/news/detail-402849.html
3.一组键值对:Map
键无序:HashMap(底层是:哈希表 jdk7:数组+链表 jdk8:数组+链表+红黑树)
键排序:TreeMap
键插入和取出顺序一样:LinkedHashMap
读取文件:Properties文章来源地址https://www.toymoban.com/news/detail-402849.html
到了这里,关于java.util.ConcurrentModificationException: null 报错解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!