黑马程序员技术交流社区
标题:
【南京校区】集合和并发修改异常
[打印本页]
作者:
大蓝鲸Java
时间:
2019-7-19 12:03
标题:
【南京校区】集合和并发修改异常
集合
就是一个容器。
就是用来装东西的。
针对于类似的容器的知识点:增 删 改 查
1.集合体系:
单列集合:一次只能存一个数据
List
有序:存取顺序。
有索引:可以通过索引获取对应的元素
可以重复:存了一个"abc" 那么还可以再存一个"abc"
Set
无序: 存取顺序不一致
无索引:不可以通过索引获取对应的元素
不可以重复:存了一个"abc" 那么不可以再存一个相同"abc"
双列集合:一次只能存两个数据
2.单列中的常用方法
boolean add(E e) 向集合中添加元素
boolean remove(E e) 将元素从集合中删除
//直接删除集合中的一个对象,是Collection中的方法
//通过索引删除Collection中是没有的。
//因为Set集合是没有索引的。
void clear() 清空集合所有的元素
boolean contains(E e) 判断集合中是否包含指定的元素
boolean isEmpty() 判断集合是否为空
int size() 获取集合的长度
3。Collection集合的遍历
1.为什么会学习迭代器?
因为以前的for循环遍历是依赖集合的长度和集合的索引。
通过每一个索引来获取元素。
但是现在单列集合中还有Set集合,Set集合是没有索引的。所以无法通过普通for循环遍历。
依赖的三个方法:
1,list.iterator();创建了一个迭代器的对象
2,it.hasNext();判断是否有元素可以被迭代器
3,it.next();获取当前指向的元素
移动指针
案例:
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String next = it.next();
System.out.println(next);
}
注意点:
1、迭代器对象随用随创建
2、hasNext方法跟next一定要配套使用
3、指针移动完毕不会复位
4.List集合概述和特点
特点:
有序
//存取顺序
//怎么存的,怎么取出来。
有索引
可以重复
17,List的集合的特有方法
void add(int index,E e) 向集合中指定索引位置添加元素
E remove(int index) 删除指定索引处的元素并返回
E set(int index,E e) 修改指定索引处的元素,返回被修改的元素
E get(int index) 获取指定索引处的元素
都是跟索引有关的。
遍历方式:
List下面所有的集合:
迭代器
普通for
Set下面所有的集合:
迭代器
疑惑:
以后创建集合的对象到底怎么写?
明确:以后创建对象一律使用:ArrayList<String> list = new ArrayList<>();
当我们自己定义一个方法的时候,方法的参数可以使用多态形式。
5.并发修改异常
问:
并发修改异常产生的原理?
在使用迭代器遍历集合的过程中,使用了集合的方法对集合进行了添加或者修改。
所以会导致并发修改异常。
如何避免?
利用迭代器自身的方法,进行添加和删除就可以了。
it.remove();//指向谁,就删除谁。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2