数组基础
- 线性表:数组、链表、队列、栈
非线性表:树、图 - 数组可以实现随机访问,因为内存空间连续,数据类型相同,但是删除的时候,为了保证数组的连续性,就要进行大量的数据搬移工作
- 数组地址的计算公式
a[i]_address = base_address +i*data_type_size
- 数组的查找操作时间复杂度并不是O(1)。即便是排好的数组,用二分查找,时间复杂度也是O(logn)。应该这样说,数组支持随机访问,根据下标随机访问的时间复杂度为O(1)
- 数组的插入和删除平均时间都是O(n)
- java删除数组的时候并不是搬移数据,只是记录数据已经被删除,当数组没有更多的存储空间时,再触发一次真正的删除操作,即JVM标记清除垃圾回收算法。
- java中的ArrayList封装了数组的很多操作,并支持动态扩容。一旦超过存储容量,扩容时比较耗内存,因为涉及到内存申请和数据搬移。