ArrayList、LinkedList、Vector 集合对比:
结构 | 安全 | 效率 | 扩容 | |
ArrayList | 数组 | 不安全 | 增删(慢)查询(快) | 1.5倍 |
LinkedList | 链表(双向链表) | 不安全 | 增删(快)查询(慢) | 无 |
Vector | 数组 | 安全 | synchronized(慢) | 2倍 |
Vector 与 ArrayList 类似, Vector 类的方法都添加了synchronized。所以它在多线程下是安全的, 但操作效率相比而言就比较慢。
ArrayList 和 LinkedList 的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 (移动数据 就是 扩容复制)
显然我们可以看出ArrayList更适合读取数据,linkedList更多的时候添加或删除数据。
ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。