1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.三者都允许插入Null元素
5.Linkedlist基于双向列表/适合插入和删除、不适合查找/随机访问等操作
6.Arraylist基于动态数组/适合随机访问、不适合插入/删除等操作
ArrayList和Vector相同点:
ArrayList和Vector两者在功能上基本完全相同,其底层都是通过new出的Object[]数组实现。所以当我们能够预估到数组大小的时候,我们可以指定数组初始化的大小,这样可以减少后期动态扩充数组大小带来的消耗。如下:
ArrayList list= new ArrayList(20);Vector list2 = new Vector(15);
由于这两者的数据结构为数组,所以在获取数据方面即get()的时候比较高效,而在add()插入或者remove()的时候,由于需要移动元素,效率相对不高。(其实对于我们平常使用来说,由于一般使用add(String element)都是让其加在数组末尾,所以并不需要移动元素,效率还是很好的,如果使用add(int index, String element)指定了插入位置,此时就需要移动元素了。)
ArrayList和Vector区别:
ArrayList的所有方法都不是同步的,而Vector的大部分方法都加了synchronized同步,所以,就线程安全来说,ArrayList不是线程安全的,而Vector是线程安全的,也因此Vector效率方面相较ArrayList就会更低,所以如果我们本身程序就是安全的,ArrayList是更好的选择。
大多数的Java程序员使用ArrayList而不是Vector,因为同步完全可以由程序员自己来控制。
LinkedList:
LinkedList其底层是通过双向循环链表实现的,所以在大量增加或删除元素时(即add和remove操作),由于不需要移动元素有更好的性能,但是在获取数据(get操作)方面要差。
所以,在三者的使用选择上,LinkedList适合于有大量的增加/删除操作和较少随机读取操作,ArrayList适合于大规模随机读取数据,而较少插入和删除元素情景下使用,Vector在要求线程安全的情况下使用。
更多推荐
互联网架构演进步骤
进程间通信机制有哪些?
分布式系统之Base理论
领取专属 10元无门槛券
私享最新 技术干货