面试之ArrayList和linkedlist及verctor之间的区别详解

①ArrayList是可变长度的数组列表,也是一个泛型类,可以存放任意类型的对象。内部是有一个Object类型数组类存放对象。 它的所有方法都是默认在单一线程进行,因此不具有线程安全性。ArrayList只能在数组末尾添加数据,但更用于查询数据和修改数据。

②LinkedList是双向链表,所有操作默认都是双向链表的操作,因为它实现了deque接口和list接口 。它是使用结点<Node>来存放数据的,一个指向链表头的结点frist和另一个指向链表结尾的结点last。linkedList更便于在链表头或者链表尾插入数据和删除数据,但查询效率要低于ArrayList。

③Vector是类似于ArrayList的可变长度的数组类型,它的内部也是使用数组来存放对象。但Vector是线程安全的,适用于多线程程序中,为保证数据同步和一致性,可以使用代替arraylist实现异曲同工之效。但是同样实现一个功能的情况下,Vector占用内存空间要比Arraylist占用的内存空间大。

如下图所示,三个实现了Java.util.List接口。

  • Vector和ArrayList底层都是Object[]存储的动态数组,LinkedList是基于链表的数据结构
  • Vector的方法都是同步的(Synchronized),而ArrayList的方法不是,因此,ArrayList的性能比Vector好
  • 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间
  • LinkedList适合增删,ArrayList和Vector适合尾部增加和查询

猜你喜欢

转载自blog.csdn.net/hai1991yu/article/details/81162334
今日推荐