一、同步性
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为要查的位置。
四、大致区别
- ArrayList 是实现了基于动态数组的数据结构,LinkedList 基于链表的数据结构。
- 对于随机访问get ArrayList 优于 LinkedList ,因为LinkedList 要移动指针。
- 对于新增和删除操作add 和 remove, LinkedList 比较占优势,ArrayList 要移动数据。
五、使用
如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用 Vector 或者 ArrayList 都可以,如果是对其他位置的插入、删除操作,最好选择LinkedList.
网友评论