数据结构(一):数组
-
定义:数组(Array)是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据
-
线性表数据结构:数据排成像一条线那样的线性结构
-
连续的内存空间:数据在内存里面的存储空间是连续的一块内存
-
具有相同类型:数组里面的所有数据的数据类型是相同的
-
-
示例代码
-
int[] array = new int[3];
-
由上述代码我们可以看出来,使用数组我们需要指定数组的长度
-
Array数组是无法动态扩容的,我们需要预先指定它的长度
-
二、图示结构
-
上图是数组简单的结构,图中的内存地址是为了方便假设的地址,真实的内存地址要比这复杂
三、操作数组的时间复杂度
-
查询
-
我们可以直接通过array[index]的方式来访问数组,所以来说,数组支持随机访问,根据下标随机访问的时间复杂度为O(1)
- 注意:我们并不能笼统的来说数组的查询复杂度为O(1)
-
-
插入
-
由上图我们可以看出来,在数组指定位置插入一个元素,这个位置之后的所有数据都要往后挪一个位置,所以这种情况的时间复杂度为O(n);
-
最理想的状态下是在该数组的尾部插入一个元素,这样一个元素都不用挪动,这时的时间复杂度为O(1)
-
综上,数组插入的时间复杂度为:O(n)
-
-
删除
-
删除数组中指定位置的一个元素,删除之后,这个位置之后的所有数据都要向前挪动一个位置,这时时间复杂度为O(n)
-
如果是删除数组尾部的元素的话,数组中元素都不用挪动,这个时候时间复杂度为O(1)
-
综上,在数组中删除一个元素的时间复杂度为O(n)
-
四、动态数组(ArrayList)
-
基本概念和用法:
-
ArrayList可以动态的进行扩容,我们在声明时不需要指定它的长度
-
ArrayList不存储基本数据类型,它存储的是基本数据类型的封装类型
-
如果声明的时候不指定类型的话,它是可以存储多种类型的数据的
-
ArrayList list = new ArrayList(); list.add(1 ); list.add("元素");
-
注意事项:
-
因为ArrayList是动态扩容的,当空间不够用时它会自动扩容,自动扩容是要消耗计算机资源的,所以如果我们的数组大小长度是确定的,优先使用Array数组
-