java ArrayList学习
ArrayList&LinkedList 区别
ArrayList是用数组实现。linkedList是链表实现。
ArrayList数组实现查找快,新增删除慢。LinkedList链表新增删除快查找慢。
为什么?
数组是申请的一块连续的内存,新增就是不断的申请拷贝数据。删除的话先查到这个数据,删除它,然后后面的所有数据都要移动。这样的数据结构查询很快。
链表的话是不连续的内存每次查找涉及到指针移动寻址。
ArrayList详解
查找
基本属性
|
|
默认构造方法
|
|
新增方法
|
|
删除
|
|
> 因为数组是连续存储所有的新增和删除操作都会涉及到后面的值和位置的修改。得出结论ArrayList的新增和删除每次都会涉及到数组的copy所以效率比较低
查找
|
|
直接通过数组下标找到到查找的元素
快速失败原理
|
|
在进行集合迭代的时候会开启新线程进行循环,
如果同时进行新增删除中都会对modCount进行++操作。在使用迭代器进行遍历arrayList的时候
modCount会发生变化实现快速失败。
解决快速失败:采用对应的线程安全的对应结构CopyOnWriterArrayList