LinkedList
LinkedList 是一种基于链表实现的集合,相比于 ArrayList,它在插入和删除元素时更快,但在读取元素时稍慢
实现原理:
LinkedList的底层是一个双向链表。链表结点由前一个地址值,当前元素,下一个地址值三部分组成,还存储了链表中的第一个和最后一个结点地址。其双向链表的特性,可以用来实现队列。当添加元素时,LinkedList 会创建新的节点,并将该节点的指针与相邻节点的指针连接起来,形成链表。
当删除元素时,LinkedList 会修改节点的指针,将被删除节点的前一个节点与后一个节点直接连接起
来。
新增元素时:
头部新增,先获取头部节点元素,判断是否为null,若为null,说明原链表中没有元素,则把 first 和 last 都赋为当前新增节点。 若不为null,说明原链表中有元素,则把first赋为当前新增节点,把原头部节点f的上级节点修改为当前新增节点的下级节点
尾部新增:处理方式和头部一致
直接调用add方法时,默认进行尾部新增:
扩容机制:
由于它的底层实现是链表,所以没有容量大小的定义,只有上个节点,当前节点,下个节点,每个节点都有一个上级节点和一个下级节点。
性能表现:
由于通过双向链表实现,元素本身携带者上一个元素及下一个元素的引用标识,因此在查询时,需要通过地址一个一个寻找过去,比较耗时,而删除与插入就很快了。因为在删除和插入时,只需要改变数据引用的上一个和下一个的标识,LinkedList比ArrayList占用资源更多,因为一个数据还需要保存指向前后数据的引用标识
线程安全问题:
LinkedList不是线程安全的,在多线程环境下使用时,需要进行额外的同步处理。
总结
1.LinkedList是基于双向链表实现,可实现队列
2.查询慢,插入和删除快
3.没有容量概念,集合的容量随着元素的加入自动增加
4.线程不安全
上一篇 >>>>> ArratsList实现原理(面试必背)
That’s it;
往事往事堪堪亦澜澜,前路漫漫亦灿灿。