List中元素有序,且是可以重复的。(有序是指元素存入的先后顺序与输出的先后顺序是一致的)
- Vector
内部是数组数据结构,是线程安全的。是最早出现的list接口(现在几乎不怎么使用)。Vector是百分百延长数组,即新数组的长度是原来数组长度的2倍。
- ArrayList
内部是数组结构,是线程不安全的。替代了Vector,遇到多线程情况,可以通过加锁来实现线程安全。ArrayList是百分之五十延长,即新数组的长度是原来数组长度的1.5倍,效率比Vector高,浪费空间较少。查询速度快。(ArrayList使用new操作初始化时会构造一个初始容量为10的空列表, ArrayList中add方法添加的都是Object,可以添加任何类型的对象,但是最终都会被提升为Object类型,因此在取出元素时,需要进行类型的强转,即Object类型转换为本来的类型)
- LinkedList
内部是链表结构的,是线程不安全的,但是效率高。List中除了Vector都是不安全的。增删元素特别快。
注意:
- 数组长度可变的原理是创建一个新数组,将原来的数组内容复制到新数组中去,增加数组的长度。
- ArrayList和LinkedList的查询功能都是从第一个元素开始,但是ArrayList中所有元素是存储在同一内存区的,遍历速度快,而LinkedList中的所有元素并不是存储在同一内存区,所以速度很慢。