计算内存地址公式:
a[k]_address = base_address + k * type_size
因此数组开头: k= 0 时 为初始地址
否则为: a[k]_address = base_address + (k-1)*type_size (每次计算地址时做减法而导致了性能的损耗)
线性表特点:
1:连续的内存空间
2:存储相同类型的数据
代表有:数组、链表、队列、栈
数组:查找的时间复杂度O(logn),根据下标随机访问(直接访问)的时间复杂度O(1)
由于需要保证内存空间的连续性:因此insert和delete都非常低效。
数组的长度,固定,会产生数组越界异常 ArrayIndecOutOfBoundsException
基本数据类型:
int [] array = new int[10];
array[10] =1;
包装类:
Integer [] array = new Integer[10];
array[10] =1;
ArrayList(容器)动态扩容,扩容细节:申请内存空间 数据搬运 扩容成1.5倍,
因此当大小已知时,尽快可能的申请已知的内存空间。
数组:当数据操作简单,数据大小固定,当需要极致的性能时使用,
多维数组 Object[][] array
ArrayList:简化细节,只能存储包装类(因为自动装箱会损耗性能),
多维ArrayList<ArrayList<Object>> array
网友评论