数组¶
数组要连续的使用,中间不能有空的。
数组的插入和删除需要移动元素。可能还需要扩容。
优点¶
速度非常快,取数组中任意下标的数据,速度一样。
数组可以快速的地址(数组的下标)运算,找到取出数组的元素。
特点¶
- 长度确定,一旦被创建,大小就是不可以改变的。
- 元素的类型必须是相同类型,不允许出现混合类型。
- 数组类型可以是任何数据类型,包括基本类型和引用类型。
- 数组有索引:索引从0开始,到数据.length-1结束。
数组操作¶
插入数据¶
在中间插入数据时,后面所有的数据都要移动,空出来位置去插入。所以数组的插入非常慢。
删除数据¶
找到数据,删除,位置就空了,为了不留空位,后面的都要向前移动。
- 缺点:
插入和删除数据 后面的数据都要移动。因为数组是不允许中间为空的,所以就要移动数据。如果数据特别多的时候 几百万个数据都要移动,速度就会很慢。
- 优点:
数组排好序就可以二分查找(折半查找)。
修改元素¶
遍历数组,得到的元素是不可变的,可以创建一个新的元素,然后新元素根据下标替换旧元素。
数组内存结构¶
结构体3部分:
- cap容量
- length长度
- 指向数组中数据的首地址的指针
数组的扩容¶
数组首先会在内存中请求开辟一块堆空间用来存储数组的长度,容量以及数组元素首地址的指针等等,然后再开辟一块堆空间用来存放数据(线性表的顺序存储)。
当容量不够的时候:
- 重新开辟新的空间。
- 将数据复制到新的空间里。
- 将旧的空间释放掉。
remove¶
删除的话,count也会变。
- 反向遍历,逆序删除(因为删除是后面的往前移,所以不会有下标超出范围。)
- 使用迭代器的remove
- 使用filter过滤