java数组,ArrayList,LinkedList
数组是一种用连续的内存空间,存储相同类型数据的线性数据结构
数组如何获取其他元素的地址?
使用寻址公式: array[i] = 数组首地址 + i * 数据类型的大小
为什么数组索引从0开始,而不是从1开始?
如果从1开始,那么寻址公式变为: array[i] = 数组首地址 + (i -1) * 数据类型的大小
对于cpu来说多了一个减法操作,性能比前面低。
操作数组的时间复杂度
查找
排序的
未排序的
插入,删除
ArrayList 源码分析
基于jdk1.8,不同版本有差异
成员变量
构造函数
关键方法
- 第一次添加数据的逻辑
初始化了一个长度为10的数组
- 第2-10次添加数据的情况
直接往数组中添加数组即可,不需要扩容
- 第11次添加数据的情况
需要扩容,扩容方法,增加原来容量的1.5倍,数组长度变为15
- 添加数据扩容的逻辑
ArrayList 底层实现原理
如何实现数组和List之间的转换
数组转list
只需要调用 .asList() 方法
用Arrays.asList转List后,如果修改了数组内容,list受影响吗?
受影响,这里面只涉及到对象的引用,没有创建新的对象,它们两个指向的同一个地址。
list转数组
调用 .toArray(数组类型和长度) 方法
List用toArray转数组后,如果修改了List内容,数组受影响吗?
不受影响,.toArray方法是将数组拷贝到的新的数组中
arrayList和LinkedList的区别
ArrayList数组实现的
LinkedList链表实现的