数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具备相同类型的数据。git
计算机会给每一个内存单元分配一个地址,计算机经过地址来访问内存中的数据,当计算机须要随机访问数组中的某个元素时,它会经过下面的寻址公式,计算出该元素存储的内存地址。github
公式以下:数组
a[i]_address = base_address + i * data_type_size
// data_type_size 表示数组中每一个元素的大小,好比:当数组类型为 int 时,data_type_size 就为 4
复制代码
插入性能优化
假设数组 a[10] 中存储了五个元素以下:1,2,3,4,5。如今要将元素 8 插入到 3 的位置,咱们只须要将 3 放到 a[5] 而后再将 a[2] 赋值为 8 便可。这样一来,数组插入一个元素的时间复杂度就会变为 O(1)。bash
前提:该数组不须要排序数据结构
删除性能
假设数组 a[10] 中存储了五个元素以下:1,2,3,4,5。如今要将 1,2 删除,咱们不须要移动别的元素补全被删除的元素,而是换另外一种方法,将删除的元素标记起来,在数组新增元素的时候,判断数组的空间是否足够,当数组空间不足时,再把标记删除的元素删掉,这样一来,时间复杂度就变为O(1)。优化
拿 ArrayList 来举例, ArrayList 没法存储基本类型,好比 int、long,须要封装为 Interger、Long 类,并且封装过程当中的「自动装箱」和「自动拆箱」会消耗必定的性能。spa