数组

数组

数组概念

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

线性表

线性表就是数据排成像一条线一样的结构。表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈等也是线性表结构。

非线性表

二叉树、堆、图等,在非线性表中,数据之间并不是简单的前后关系。

连续的内存空间和相同类型的数据

优点:随机访问(下标查找数据)

缺点:删除、插入数据非常的低效

数据存储原理和为啥下标从0开始

案例

int[] a = new int[10]

右边的1000到1039为连续的内存空间,其中每个数据占用4个字节数据,因为int

取值代码:

a[i]_address = base_address + i * data_type_size

其中 data_type_size 表示数组中每个元素的大小

假设我要拿a[1]

a[1]=999+4*1=1003           1000-1003

如果第一个元素的索引不从0开始,每一次都要进行一次-1,对于cpu来说,就是多一次减法指令,以0开始可以提高性能。

时间复杂度分析

根据索引取值

由于根据索引取值,n和代码是不影响的,代码执行时间为一个常数,时间复杂度为O(1)

插入数据

依次从0为开始,时间复杂度为1+2+...n/n=O(n)

如果数据不是有序的,这里我们只是把它当做容器

可以用这种插入方法,时间复杂度为O(1)

删除数据

删除数据和插入数据时间复杂度都为O(n)

删除数据减小时间复杂度,骚操作--标记清除思想

假如我们要删除a,b,c三个元素,我们只需要把它们记下来,直到数组被删除完全,在执行一次删除

其实这就是垃圾回收经常使用的标记-清除思想

极客时间版权所有: https://time.geekbang.org/column/article/40961

posted @ 2019-10-15 22:34  zx125  阅读(141)  评论(0编辑  收藏  举报