数组的插入最好时间复杂度为O(1),最坏的时间复杂度为O(n),平均时间复杂度为O(n).
数组插入的改善方法:当数组存储的无序数据时,可以将插入的值直接放入,把替换的值放入到数组的末尾.
数组的删除的最好时间复杂度为O(1),最坏的时间复杂度为O(n),平均时间复杂度为O(n).
数组插入的改善方法:当数组删除时,并不是真正的删除.只是标记为删除.只有当插入数据数组存储不下时开始真正的清除
数组中标记为删除的数据.多次删除集中在一起,提高效率.
数组为什么可以根据下标随机访问?
首先数组是一个连续的内存空间.然后可以根据 a[i]_address = base_address + + i * data_type_size.这个公式在知道了
下标的情况下取出存储的值.
多维数组的寻址公式: 若二维数组大小为m*n,那么寻址公式为a[i][j]_address = base_address + (i * n+j)*data_type_size
容器能否完全替代数组?
相比于数字,java中的ArrayList封装了数组的很多操作,并支持动态扩容。一旦超过村塾容量,扩容时比较耗内存,
因为涉及到内存申请和数据搬移。
数组适合的场景:
1) Java ArrayList 的使用涉及装箱拆箱,有一定的性能损耗,如果特别管柱性能,可以考虑数组
2) 若数据大小事先已知,并且涉及的数据操作非常简单,可以使用数组
3) 表示多维数组时,数组往往更加直观。
4) 业务开发容器即可,底层开发,如网络框架,性能优化。选择数组。