数组(Array)
一、数组特点:
所谓数组,就是相同数据类型的元素按一定顺序排列的集合;数组的存储区间是连续的,占用内存比较大,故空间复杂的很大。但数组的二分查找时间复杂度小,都是O(1);数组的特点是:查询简单,增加和删除困难;
1.1 在内存中,数组是一块连续的区域
1.2 数组需要预留空间
在使用前需要提前申请所占内存的大小,如果提前不知道需要的空间大小时,预先申请就可能会浪费内存空间,即数组的空间利用率较低。注:数组的空间在编译阶段就需要进行确定,所以需要提前给出数组空间的大小(在运行阶段是不允许改变的)
1.3 在数组起始位置处,插入数据和删除数据效率低。
插入数据时,待插入位置的元素和他后面的所有元素都需要向后搬移
删除数据时,待删除位置后面的所有元素都需要向前搬移。
1.4 随机访问效率很高,时间复杂度可以达到O(1)
因为数组的内存是连续的,想要访问那个元素,直接从数组的首地址向后偏移就可以访问到了。
1.5 数组开辟的空间,在不够使用的时候需要进行扩容;扩容的话,就涉及到需要把旧数组中的所有元素向新数组中搬移。
1.6 数组的空间是从栈分配的。(栈:先进后出)
二、数组的优点:
随机访问性强,查找速度快,时间复杂度是0(1)
三、数组的缺点:
3.1 从头部删除、从头部插入的效率低,时间复杂度是o(n),因为需要相应的向前搬移和向后搬移。
3.2 空间利用率不高