【常见集合篇03】ArrayList数据结构-数组

30 阅读2分钟

知识点

  • 数据结构-数组

  • ArrayList 源码分析

  • ArrayList底层的实现原理是什么

  • ArrayList list = new ArrayList(10)中的list扩容几次

  • 如何实现数组和List之间的转换

  • ArrayList和LinkList的区别是什么

数组

数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构

image.png

数组如何获取其他元素的地址值?

image.png 寻址公式:a[i] = baseAddress + i*dataTypeSize

  • baseAddress: 数组的首地址
  • dataTypeSize:代表数组中元素类型的大小,int型的数组,dataTypeSize=4个字节

为啥数组索引要从0开始呢?假如从1开始不行么?
寻址公式: a[i] = baseAddress + (i-1)*dataTypeSize

对于cpu来说,增加了一个减法指令

操作数组的时间复杂度(查找)

  • 根据索引查询元素
  • 不知道索引,查询元素

数组元素的访问是通过下标来访问,计算机通过数组的首地址和寻址公式能够快速找到想要访问的元素

image.png

未知索引查询:
情况一:查找数组内的元素,查找55号数据 image.png 情况二:查找排序后数组内的元素,查找55号数据 image.png

操作数组的时间复杂度(插入、删除)

数组是一段连续的内存空间,因此为了保证数组的连续性会使得数组的插入和删除的效率变的很低

image.png

最好情况下是O(1),最坏的情况下O(n),平均情况下的时间复杂度是O(n)