数组
定义
数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。
关键词
- 线性表:数据线性,每个线性表上的数据最多只有前和后两个方向。
- 连续的内存空间和相同类型的数据。这个特点使得数组有优点“随机访问”,同时也造成数组删除和插入元素的效率低
优点:数组根据下标随机访问数组元素
计算机会给每个内存单元分配一个地址,计算机通过地址访问内存中的数据。所以当计算机要随机访问内存中某个数组元素时,需要先确定元素存储的内存地址,这里有一个公式
a[i]_address = base_address + i * data_type_size
- data_type_size表示数组中每个元素的大小
缺点:插入和删除的效率低
为保证内存数据的连续性,当插入和删除元素时需要大规模的数据搬移,
面试题:数组和链表的区别
链表适合插入和删除,时间复杂度是$O(1)$,数组支持随机访问,根据下标随机访问的时间复杂度是$O(1)$
JVM标记清除算法
在标记阶段,会遍历所有GC ROOTS,将所有GC ROOTS可达的对象标记为存货,只有当标记工作完成后,清理工作才会开始。问题:标记和清理效率都不高,会产生不连续的内存空间碎片