一:概念介绍
List接口的实现类有3个:ArrayList(常用) ,LinkedList,Vector。
ArrayList:它是最常用的List实现类,内部是通过数组实现的,数组的缺点是它需要一块连续的内存空间,数组内的元素必须是连续的,所以每当数组大小不能满足时需要增加存储能力,就需要将已经有数据的数据复制到新的存储空间中。所以ArrayList它的优点是能对元素进行快速随机的访问,缺点是对ArrayList进行元素的插入或者删除时,需要对数组进行复制、移动,代价比较高。因此,ArrayList适合随机查找或者遍历元素,不适合插入和删除。
LinkedList:它也是List实现类,内部是用链表结构存储数据的,故避免了数组需要一块连续存储空间的缺点。LinkedList优点:很适合元素的动态插入和删除;缺点:对于元素的随机访问和遍历速度比较慢。另外LinkedList还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当做堆栈、队列和双向队列使用。
Vector:和ArrayList类似,内部也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但是同步需要很高的花费,因此,Vector访问元素的速度要比ArrayList慢。
二:性能比较
ArrayList和LinkedList的区别:
1: ArrayList实现了基于动态数组的数据结构,LinkedList实现了基于链表的数据结构。
2: 对于随机访问set和get,ArrayList性能要优于LinkedList,因为LinkedList是链表,而ArrayList是动态数组。时间复杂度LinkedList要远远大于ArrayList。特殊情况:对于访问开头元素,ArrayList和LinkedList性能一样。
3: 对于增加add和删除remove,LinkedList性能要优于ArrayList,因为ArrayList是动态数组,删除和增加元素要移动数组内相关的元素,而LinkedList则不需要。LinkedList删除和增加任意位置的元素,