常见面试问题
-
ArrayList和LinkedList的区别?
-
ArrayList和Vector的区别?
List
java中list是很常见的数据类型,它是有序的集合,它有三个实现类,分别是ArrayList、LinkedList、Vector。它们三者有啥区别,我们可以直接看如下表格:

底层实现就决定着这几个list的区别,Vector类的所有方法都是同步的(如下图Vector源码add方法加上了synchronized),可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间,Arraylist不是同步的,所以在不需要保证线程安全时时建议使用Arraylist。

从这两个集合的底层实现就决定着它们的不同,Arraylist的底层实现是基于动态数组,数组存储它是一段连续的内存空间,所以它的特点就是寻址读取数据比较容易,插入和删除比较慢,因为读取数据时,只需要知道索引即可,但是插入和删除数据时,都需要移动数据的位置;而LinkedList底层实现是双向链表,它在首位置插入数据时,first引用指向需要插入到链表中的节点对象,新节点的next引用指向原先的首节点对象,在其它位置插入数据时也很方便,只需定位到要插入的左右节点即可,而查询的话得从上一个节点一步一步往上找,效率很慢。


应用场景:ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList用在查询比较少而插入删除比较多的情况