路随远,行则将至;路虽难,做则必成
—— 24.5.26
一、Collection接口
1.概述:
单列集合的顶级接口
2.使用
Collection<泛型>对象名=new 实现类集合对象<>()
<E>:泛型,决定集合中的元素都是啥类型的,必须指定的是引用数据类型3.方法
boolean add(E e):将给定的元素添加到当前集合中(我们一般调add时.不用boolean接收,因为add一定会成功)
boolean addAll(Collection<? extends E> c):将另一个集合元素添加到当前集合中(集合合并)
void clear():清除集合中所有的元素
boolean contains(Object o):判断当前集合中是否包含指定的元素
boolean isEmmpty():判断当前集合中是否有元素->判断集合是否为空
boolean remove(Obiect o):将指定的元素从集合中删除
int size():返回集合中的元素个数。
Object[] toArray0:把集合中的元素,存储到数组中
二、迭代器
1.概述
Interator接口
2.获取
Collection中的方法 —— Iterator<E> iterator()
3.方法
boolean hasNext() —— 判断集合中有没有下一个元素
E next() —— 获取下一个元素
4.注意
并发修改异常:我们调用了add方法,而add方法底层只给modCount++,但是再次调用next方法的时候,并没有给修改后的modCount重新赋值给expectedModCount,导致next方法底层的判断判断出实际操作次数和预期操作次数不相等了,所以抛出了”并发修改异常”
三、数据结构
1.栈:先进后出
2.队列:先进先出
3.数组:查询快 -- 有索引
增删慢 -- 定长4.链表:查询慢
增删快
5.单向链表:前面记录后面节点地址,但是后面不记录前面节点地址
6.双向链表:前后两个节点互相记录地址
四、List接口
ArrayList
1.特点
a.元素有序 —> 按照什么顺序存的,就按照什么顺序取
b.元素可重复
c.有索引 —> 可以利用索引去操作元素
d.线程不安全2.数据结构 -- 数组
3.方法
boolean add(E e) —> 将元素添加到集合中->尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值)
void add(int index,Eelement) —> 在指定系引位置上添加元素
boolean remove(Object o) —> 删除指定的元素删除成功为true,失败为falseE remove(intindex) —> 删除指定索引位置上的元素,返回的是被删除的那个元素
E set(int index,E element) —> 将指定索引位置上的元素,修改成后面的element元素E get(int index) —> 根据索引获取元崇
int size() —> 获取集合元素个数4.底层原理
a.不是一new底层就会创建初始容量为10的空列表,而是第一次add的时候才会创建初始化容量为10的空列表
b.ArrayList底层是数组,那么为啥还说集合长度可变呢?ArrayList底层会自动扩容->Arrays.copyOf
c.扩容多少倍?
1.5倍LinkList
1.特点
a.元素有序
b.元素可重复
c.有索引 —> 这里说的有索引仅仅指的是有操作索引的方法,不代表本质上具有索引
d.线程不安全2.数据结构 -- 双向链表
3.方法
public void addFirst(E e):将指定元素插入此列表的开头。
public void addLast(E e):将指定元素添加到此列表的结尾。
public E getFirst():返回此列表的第一个元素。
public E getLast():返回此列表的最后一个元素。
public EremoveFirst():移除并返回此列表的第一个元素。
public EremoveLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出个元素。
public void push(E e):将元素推入此列表所表示的堆栈。
public boolean isEmpty():如果列表没有元素,则返回true。
五、增强for
1.作用
遍历集合或数组
2.格式
for(元素类型 变量名:要遍历的集合名或数组名){
变量名代表每一个元素
}
3.实现原理
遍历集合时,底层为迭代器
遍历数组时,底层为普通for