ArrayList的优缺点
优点
- ArrayList底层以数组实现,是一种随机访问模式、实现了RandomAccess接口,查找非常快
- ArrayList在顺序添加元素时非常方便 缺点
- 删除/插入元素时做一次元素复制操作。因此如元素量大便会比较耗费性能 使用场景 ArrayList比较适合顺序添加、随机访问的场景。
数组与List之间的转换
- 数组转List:使用Arrays.asList(array)进行转换
- List转数组:使用List自带的toArray()方法
ArrayList和LinkedList的区别
- 数据结构实现:
- ArrayList是动态数组的数据结构实现
- LinkedList是双向链表的数据结构实现
- 随机访问效率:
- ArrayList比LinkedList的效率快,因为LinkedList是线性数据存储方式,所以需要移动指针从前向后依次查找
- 增加和删除效率:
- 非首尾的增加和删除操作,LinkedList比ArrayList效率快,因为ArrayList增删操作要影响数组内其它数据的下标
- 内存空间占用:
- LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储两个引用,一个指向前元素,一个指向后元素
- 线程安全:ArrayList和LinkedList都是不同步的,所以都不是线程安全的 综合来说
- 在需要频繁读取集合中的元素时,更推荐使用ArrayList
- 在插入和删除操作较多时,更推荐使用LinkedList 补充 数据结构基础之双向链表
- 双向链表也叫双链表,是链表的一种,它的每个数据节点都有两个指针,分别指向直接后驱和直接前驱。所以,从双向链表中的任意节点开始,都可以很方便的访问它的前驱节点和后继节点。
ArrayList和Vector的区别是什么
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合
- 线程安全:Vector 使用了Synchronized 来实现线程同步,是线程安全的,而ArrayList是非线程安全的
- 性能:ArrayList在性能方面优于Vector
- 扩容:ArrayList和Vector都会根据实际的需要动态的调整容量,只不过在vector扩容每次会增加1倍,而ArrayList只会增加50%
- Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象,但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。
- ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList