集合体系结构
-
collection单链集合:是单列集合的祖宗接口,他的功能是所有单列集合可以继承使用的
-
创建collection对象
Collection<String> coll=new ArrayList<>();//学习阶段才创建的collection中的arraylist
方法名称 说明 boolean add() 集合中添加指定元素 void clear() 清空集合中所有元素 boolean remove() 删除集合中给定的对象 contains() 判定对象集合中是否有给定的对象 isEmpty() 判断当前集合是否为空 int size() 返回集合中的元素个数 - list集合,添加元素是有索引的,可重复,有序
- set集合,添加元素无索引,不重复,无序的
-
map双链集合
collection集合:
-
collection的遍历方式
-
创建迭代器对象:
coll.iterator()
-
迭代器遍历
-
迭代器不依赖索引
-
迭代器在Java中的类是iterator,迭代器是集合专用的遍历方式
-
注意事项:
- 报错NoSuchElementException:没有元素异常
- 迭代器遍历完指针不会复位
- 循环中只能用一次net方法
- 迭代器遍历时,不能用集合的方法进行增加或者删除
-
迭代器在中常用的方法:
方法名称 方法说明 hasNext(); 判断当前位置是否有元素,有为true无为false next(); 获取当前迭代器指针的元素,向下移动指针 -
-
增强for遍历
- 底层就是迭代器,为了简化迭代器的书写而形成的
- 使用范围:单列集合,数组
- 细节:修改增强for遍历的变量,不会改变集合中原本的数据
-
lambda遍历
- 更简单的更直接的遍历集合的方法
方法名称 说明 default void forEach(Consumer<? super T> action): 结合lambda遍历集合
-
list集合:
-
添加元素是有序的可重复的有索引的
- 添加元素,添加到指定位置,原来索引上的元素往后面移动
- 删除元素remove。删除指定元素的索引且返回删除的元素,在删除元素优先删除类型一致的
- 修改元素,修改指定索引地方的元素,且返回被修改的元素
- 获取指定索引的元素,get(i)
-
list 遍历方式
- 迭代器遍历
- 列表迭代器遍历
- 增强for循环遍历
- lambda遍历
遍历方式的对比:
- 迭代器:在遍历过程中需要删除元素
- 列表迭代器:在遍历过程中,需要添加元素
- 增强for:仅仅遍历
- lambda:仅仅遍历
- 普通for:遍历操作索引,可以用普通for遍历
实现类的学习:
arraylist
linkedlist
vector
Arrayslist集合:
- 底层原理:
- 是一个数组结构,数组:elementData,和一个指针size,size包括数组的长度,和下次存入元素的位置构成。
- 利用空参创建的集合,在底层创建一个长度为0的数组
- 在添加元素时,在添加元素时会创建一个长度为10的数组(elementData),其数组元素的初始化值为null
- 长度为10的数组被存满之后,会自动扩容为原来的1.5倍
- 如果一次添加的元素特别多1.5倍放不下,数组的长度以实际为准
linkedlist集合:
- 底层原理:底层时双链表结构的,查询慢,删除快,如果操作的是首位元素也是很快的
- linklist有很多直接操作首位元素的特有api
特有方法 | 说明 |
---|---|
addFirst() | 该列表开头添加指定元素 |
addLast() | 添加元素到此列表的末尾 |
getFirst() | 返回列表第一个元素 |
getLast() | 返回列表最后一个元素 |
removeFirst() | 列表删除并返回第一个元素 |
removeLast() | 列表删除并返回最后一个元素 |
总结
在以后,如何避免并发修改异常,在使用迭代器,或者增强for遍历的过程中,不要使用集合的方法来添加或者删除元素