数据结构-数组基础知识

今天开始,我们来复习下数据结构的基础知识。


定义

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

线性表就是数据排成一条线一样的结构,每个线性表上的数据最多只有前和后两个方向。而非线性表的数据并非只是简单的前后两个方向。

线性表包括就是今天要复习的内容,数组、链表、队列、栈。

非线性表有树、图、堆等。

随机访问

按下标随机访问

直接通过寻址公式,计算出该元素存储的内存地址,时间复杂度是O(1)。

按值随机访问

需要遍历数组,O(N)。

插入

在有序数组中插入

为了保持数据的连续性,需要对数据进行搬移,时间复杂度是O(N)。

在无序数组中插入

在不需要保持数据连续性情况下,可以先将插入位置的数据搬移到数组末端,再将数据插入。此时时间复杂度就是O(1)。

删除

追求连续性

需要实时搬移数据,时间复杂度就是O(N).

不追求连续性

先标记,再一次性删除,时间复杂度就是O(1)。

选择容器or数组

    ArrayListd的优缺点

    优点:一是将数组操作细节隐藏起来,同时支持动态扩容(1.5倍)。

    缺点:动态扩容时,涉及数组搬移到新数组,比较耗时,无法存放基础类型(只能存放Integer等包装类)。

    什么时候选择数组

特别关注性能,或者希望使用基本类型。

如果数据大小事先已知,对数据操作非常简单,不需要用到ArrayList的大部分方法。

多维数组的时候,使用数组比ArrayList更加直观。

你可能感兴趣的:(数据结构-数组基础知识)