跳转至

数组

数组要连续的使用,中间不能有空的。

数组的插入和删除需要移动元素。可能还需要扩容。

优点

速度非常快,取数组中任意下标的数据,速度一样。

数组可以快速的地址(数组的下标)运算,找到取出数组的元素。

特点

  • 长度确定,一旦被创建,大小就是不可以改变的。
  • 元素的类型必须是相同类型,不允许出现混合类型。
  • 数组类型可以是任何数据类型,包括基本类型和引用类型。
  • 数组有索引:索引从0开始,到数据.length-1结束。

数组操作

插入数据

在中间插入数据时,后面所有的数据都要移动,空出来位置去插入。所以数组的插入非常慢。

删除数据

找到数据,删除,位置就空了,为了不留空位,后面的都要向前移动。

  • 缺点:

插入和删除数据 后面的数据都要移动。因为数组是不允许中间为空的,所以就要移动数据。如果数据特别多的时候 几百万个数据都要移动,速度就会很慢。

  • 优点:

数组排好序就可以二分查找(折半查找)。

修改元素

遍历数组,得到的元素是不可变的,可以创建一个新的元素,然后新元素根据下标替换旧元素。

数组内存结构

结构体3部分:

  1. cap容量
  2. length长度
  3. 指向数组中数据的首地址的指针

数组的扩容

数组首先会在内存中请求开辟一块堆空间用来存储数组的长度,容量以及数组元素首地址的指针等等,然后再开辟一块堆空间用来存放数据(线性表的顺序存储)。

当容量不够的时候:

  1. 重新开辟新的空间。
  2. 将数据复制到新的空间里。
  3. 将旧的空间释放掉。

remove

删除的话,count也会变。

  1. 反向遍历,逆序删除(因为删除是后面的往前移,所以不会有下标超出范围。)
  2. 使用迭代器的remove
  3. 使用filter过滤