27 ArrayList 和 Vector 的区别是什么?

ArrayList 和 Vector 的区别是什么?

答:

  • List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。

  • List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。

主要区别:

  • 同步性:Vector是线程安全的,用synchronized实现线程安全,而ArrayList是线程不安全的。(实现同步需要很高的花费,所以访问Vector比访问ArrayList慢)

  • 数据容量增长:二者都有一个初始容量大小,采用线性连续存储空间,当存储的元素的个数超过了容量时,就需要增加二者的存储空间,Vector增长原来的一倍,ArrayList增加原来的0.5倍。

总结:

  • LinkedList:增删改快

  • ArrayList:查询快(有索引的存在)

  • 如果只有一个线程会访问到集合,那最好使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们再去考虑和编写线程安全的代码。

拓展:

  • LinkedList和ArrayList都是通过数组实现。缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。

  • LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。

参考博文: https://blog.csdn.net/ldxlz224/article/details/52574821

参考博文: https://www.cnblogs.com/williamjie/p/11158523.html

相关推荐