今天开始,我们来复习下数据结构的基础知识。
定义
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
线性表就是数据排成一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。而非线性表的数据并非只是简单的前后两个方向。
线性表包括就是今天要复习的内容,数组、链表、队列、栈。
非线性表有树、图、堆等。
随机访问
按下标随机访问
直接通过寻址公式,计算出该元素存储的内存地址,时间复杂度是O(1)。
按值随机访问
需要遍历数组,O(N)。
插入
在有序数组中插入
为了保持数据的连续性,需要对数据进行搬移,时间复杂度是O(N)。
在无序数组中插入
在不需要保持数据连续性情况下,可以先将插入位置的数据搬移到数组末端,再将数据插入。此时时间复杂度就是O(1)。
删除
追求连续性
需要实时搬移数据,时间复杂度就是O(N).
不追求连续性
先标记,再一次性删除,时间复杂度就是O(1)。
选择容器or数组
ArrayListd的优缺点
优点:一是将数组操作细节隐藏起来,同时支持动态扩容(1.5倍)。
缺点:动态扩容时,涉及数组搬移到新数组,比较耗时,无法存放基础类型(只能存放Integer等包装类)。
什么时候选择数组
特别关注性能,或者希望使用基本类型。
如果数据大小事先已知,对数据操作非常简单,不需要用到ArrayList的大部分方法。
多维数组的时候,使用数组比ArrayList更加直观。
网友评论