文章目录
一、使用场景
插入数量较多使用linkedList 查询使用ArrayList 保证线程安全使用Vector
二、ArrayList初始化过程
1.7之前ArrayList默认长度为10,1.7之后在调取add方法时才将长度初始化为10
扩容规则 length+length*0.5
扩容机制:将原数组复制到新数组后,再把原数组地址值指向新数组
三、arrayList和linkedList区别
1.arrayList增删慢原因
arrayList增删慢原因:
①直接进行add():进行判断是否扩容,而后插入
②指定位置插入add(index,data):
1.进行校验判断是否需要扩容
2.将原有数据进行copy
3.对指定index位置进行覆盖,原有进行前移或后移
③删除:
本质也是对数组复制将数组值进行前移或后移,删除速度取决于元素对于数组的末端距离
2.linkedList增删快原因
数组结构为双向链表每个节点用node表示
创建新节点是指明新的前驱和侯集
新增只需修改node前后节点的next和prev属性
3.linkedList查询慢原因
由于底层为链表结构查询时需要从链表头或尾结点进行查找
小优化:比较index与节点数的2/1决定从头查找还是从尾查找
3.ArrayList是否适合做队列
不适合 队列需要在数位追加数据或在头部删除数据 arrayList对于增删操作太过繁琐