ArrayList,LinkedList,Vector

作者: Cocoonshu粽子 | 来源:发表于2017-03-03 07:34 被阅读38次
一、同步性

ArrayList 和 LinkedList 是不同步的,Vector 是同步的。如果不要去线程安全的话,可以使用ArrayList或者LinkedList 可以减少因同步的开销,但是在多线程,为保证线程安全性,就要使用Vector ,ArrayList 和LinkedList 可以通过一些方法达到同步,但是同样会影响效率。

二、数据增长

ArrayList 和Vector 都是使用Object 的数组形式来存储的。当向这两种类型中增加元素的时候,元素的数目超过了数组目前的长度,他们需要扩展内部数组的长度,Vector 缺省的情况下自动增长原来的一倍的数组长度,ArrayList 是原来的50%。因而你获取的这个集合的所占空间要大于你实际需要的空间。

三、检索、插入、删除对象的效率

ArrayList 和 Vector 中,检索一个对象,在末尾插入、删除一个对象的时间是一样的,O(1)
在其他位置增加或者移除元素时间会呈线性增长:O(n-i),因为ArrayList 和 Vector 是用数组实现的,所以中间插入或者移除,需要移动其后面所有的元素。
LinkedList 在插入、删除集合中任何位置的元素所花费的时间都是一样的O(1),但是由于是用链表实现的,进而查询比较慢,为O(i),i为要查的位置。

四、大致区别
  1. ArrayList 是实现了基于动态数组的数据结构,LinkedList 基于链表的数据结构。
  2. 对于随机访问get ArrayList 优于 LinkedList ,因为LinkedList 要移动指针。
  3. 对于新增和删除操作add 和 remove, LinkedList 比较占优势,ArrayList 要移动数据。
五、使用

如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用 Vector 或者 ArrayList 都可以,如果是对其他位置的插入、删除操作,最好选择LinkedList.

相关文章

网友评论

    本文标题:ArrayList,LinkedList,Vector

    本文链接:https://www.haomeiwen.com/subject/srhlgttx.html