LinkedList/ArrayList/Vector区别

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理论

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191009A0EYL700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券