数据结构学习--数组
数组的定义
数组是一种线性表
数据结构。它用一组连续的内存空间
,来存储一组具有相同类型的数据。
数组的特性
线性表:数据排成像一条线一样的结构。数组、链表、队列、栈等也都是线性表数据结构。图、二叉树、堆等是非线性表结构
连续的内存空间:基于这个特性能够做对数组内的任一元素进行随机访问,如果想对数组进行插入、删除操作,为保证内存实用的连续性,就需要做大量的数据搬移操作。(动态扩缩容)
各种操作的时间复杂度
插入操作最好/最坏/平均时间复杂度:O(1)/O(n)/O(n)
删除操作最好/最坏/平均时间复杂度:O(1)/O(n)/O(n)
数组可以支持随机访问,根据下标随机访问的时间复杂度为O(1),查找的时间复杂度并不是O(1)
数组与编程语言比较
从ArrayList的优势上来看,ArrayList最大的强项是把很多对数组的操作都封装了起来,还支持动态扩容。每次扩容大小1.5倍,但是扩容操作也是比较耗时的,所以建议在创建ArrayList的时候事先指定数据大小。
从ArrayList的不足上来看,ArrayList无法存储基本类型,比如int long,需要Autoboxing成Integer/Long类才可以使用。而这一过程会有一定的性能消耗,如果过分的关注性能的话,建议使用数组。此外,数组在表示多维数组的时候往往比较直观。
数组的内存地址计算
1 | 一维数组: |
数组小学问
为什么数组的下标都从0开始呢?
leetcode数组练习题目
1 | //执行用时 : 15 ms, 在Fibonacci Number的Java提交中击败了44.97% 的用户 |