1. List集合特点
1.有序,可重复,可索引
2.所有的方法围绕着这些特性提出,特别是可索引
2. List独有api
主要是围绕可索引这一特性提出
3. List的遍历方式
1.Collection集合的三种遍历方式:迭代器,foreach(增强for),lambda表达式
2.利用索引遍历,list.size()
4. List实现类的底层原理
4.1 ArrayList底层
基于数组实现,特点就是查询快,增删比较慢
最开始是一个大小为0的数组
第一次创建集合并添加首个元素是,创建一个默认大小为10的数组,size记录了当前元素个数,同时也是下一个插入位置
4.1.1 ArrayList的删
删除元素:删除是每次进行数组复制,然后让旧的elementData置为null进行垃圾回收
4.1.2 ArrayList的扩容
当插入元素超过数组大小,会调用grow函数来进行扩容到原来的1.5倍
4.2 LinkedList底层
基于双链表实现,特点是查询慢,对首尾元素操作很快,可以用来实现stack与queue
4.2.1 LinkedList独有的api
主要是对双链表头尾进行的操作
5. 并发修改异常
集合中找元素并删除时出现异常,即结构发生改变时发生的异常
5.1 使用迭代器遍历删除当前元素
如果删除操作使用list.remove(),会出现数组越界的风险
要用it.remove()即迭代器自己的方法
5.2 foreach遍历删除
不能用,会提示并发修改异常
5.3 使用for语句遍历删除元素
可以从下标大往小删除,或者每次下标自减
6. 使用Array.asList()时出现的一些小问题
- 和原有的array绑定互相影响,当其中一个更新时,一个跟随更新
- 不支持add()、remove()、clear()等方法;
- 该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新;
- 该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean);