赞
踩
1.底层实现:底层使用数据实现,Object[] elementData
2.特点:顺序排序,查询速度快,插入,删除速度慢(顺序删除速度慢,随机删除速度快)
3.查询原理:查询时,根据输入的index值进行快速定位查询
4.插入,删除原理:以新增为例,当在index位插入新的元素,ArrayList会复制index+1位后面的所有元素,然后将元素按顺序插入到index+1位后面,实现元素的插入,删除同理,即是覆盖操作,所以相对于LinkedList插入删除速度较慢。但是在随机插入时,则无需考虑这么多,所以速度略快
5.初始化:ArrayList初始化长度为10(),扩容机制是插入前进行判断,然后进行扩容,讲数组长度扩容为原来的1.5倍,然后将原数组复制到新数组再进行插入
tips:ArrayList虽然可以自定义初始化长度,但是初始化之后数组虽然存在,但是并没有长度,即长度初始化之后是0,此时如果按照index进行set操作,会出现数组越界报错,当第一个元素插入后,数组的长度才会变为初始化设置的值
6.安全问题:ArrayList虽然是不安全的,但是大部分时候我们在使用ArrayList时都是在单线程操作中,而且绝大部分操作都是查询操作,所以安全性的要求也并没有那么高。Vector是安全性的ArrayList,其操作就是在ArrayList的基础上在每个方法上都增加synchronized关键字,因为虽然安全,但是效率及其低下,所以建议使用Collections.synchronizedList对ArrayList进行安全性操作
Vector(很少使用)
1.底层:类数组实现
2.特点:加强版ArrayList,不过大小可以自由根据需求增大或减少
Collections.synchronizedList
1.使用方法:List<E> list = Collections.synchronizedList(new ArrayList<E>())
2.特点:在add()方法时默认添加了synchronized关键字,保证安全性能,数据添加时不会出现丢失问题,而遍历时需要手动增加synchronized关键字(迭代器操作)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。