1. 线性表概念(线性数据存储结构)
相同类型的有限序列
数据存储的本质是内存上的一个空间。
2. 线性表的分类
1. 顺序存储结构
当数据存储时,不用记录数据的位置。直接找来内存中一整块空间,来依照顺序存储连续的一组数据,保证数据物理上的线性。
数组,ArrayList(底层是动态数组)
2. 链式存储结构
当数据存储时,不用分配整块的空间,各个数据分配在不同的内存地址,只是存数据的同时,指向下一次存储的数据的位置(前驱和后继),保证数据逻辑上的线性。
linkedList
3. 顺序表和链表的区别
参考:https://blog.csdn.net/qq_15037231/article/details/51816757
1.顺序表
访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。
扩充策略:
-
每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。
特点:节省空间,但是扩充操作频繁,操作次数多。
-
每次扩充容量加倍,如每次扩充增加一倍存储空间。
特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。2.
面试题:
ArrayList和LinkedList的区别(也是顺序表和链表的区别):
(1)ArrayList是基于动态数组实现的,LinkedList是基于双向链表实现的。
(2)ArrayList支持随机访问(通过下标),LinkedList不支持。
(3)ArrayList的查询和尾部插入元素效率较高,中间插入和删除元素效率较低,因为有大量的数组复制操作。
LinkedList的插入和删除效率较高,只需要把节点指针改变一下就行,但是查询效率较低,即使有双向链表的特性可以从两个方向查找,但还是需要使用蛮力法的方式进行遍历,所以效率较低。
(4)ArrayList会造成一定的空间浪费,因为随时需要探测数组容量然后扩容;LinkedList通过节点方式进行存放数据,不存在空间浪费。