1.ArrayList的缺陷
ArraryList由于底层是一段连续的空间,所以在ArrayList任意位置插入或者删除元素时,就 需要将后续元素往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。因此,Java集合中还引入了LinkedList,即链表结构。
2.链表的概念和结构
链表是一种物理结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现 的。我们先来看张图:
注意:
- 从上图可以看出,链式结构在逻辑上是连续的,但是物理上不一定连续
- 现实中的结点一般都是从堆上申请出来的
- 从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续
在实际情况中,链表的结构非常多样,以下情况组合起来就有八种链表结构:
1.单向或者双向
2.带头或者不带头
3.循环或者非循环