一、List的子类及特点
1、Vector:有角标。内部是数组数据结构,是同步的。效率低,增删、查询都很慢(几乎不使用Vector)。大小可变(数组100%延长)
2、ArrayList:有角标。内部是数组数据结构,是不同步的。替代了Vector,查询的速度快。大小可变(数组50%延长,节省空间,提高效率)
3、LinkedList:有角标。内部是链表数据结构(双向链表),是不同步的。效率高,增删元素的速度很快
注:集合中,只有Vector是同步的,其余都是不同步的。但多线程不用Vector,要么给ArrayList加锁,要么用其他方式
二、Vector
1、Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作
2、数组数据结构的特点
(1)每一个元素上都带着编号
(2)用的是连续的存储
3、JDK 1.0版本,集合只有一个,就是Vector。JDK 1.2版本,有了集合框架(各种数据结构),出现了List接口,Vector才实现了List接口,成为集合框架中的一员
注:与新Collection实现不同,Vector是同步的(线程安全的)
三、ArrayList
1、List接口的大小可变数组的实现
2、ArrayList底层是数组结构,存储空间连续,查询快,增删慢(角标不变,插入位置之后的元素自动顺延 -- 牵一发而动全身)
3、ArrayList是不同步的。多线程时,需要给ArrayList加锁。将添加、删除方法放在同一个锁中,即可保证线程安全
eg:List list = Collections.synchronizedList(new ArrayList(xxx));
4、可变长度数组:也叫大小可变数组、可增长的数组。实现原理:创建一个新数组,将原来数组中的内容都复制到新数组中来(数组的长度是固定的)。Vector是百分之百延长,ArrayList是百分之五十延长 -- 节省空间,提高效率
5、构造方法
(1)ArrayList():构造一个初始容量为10的空列表
(2)ArrayList(Collection<? extends E> c):构造一个包含指定集合c的元素的列表
(3)ArrayList(int initialCapacity):构造一个具有指定初始容量的空列表
6、ArrayList特有的方法
(1)void ensureCapacity(int minCapacity):ArrayList的扩容方法。如有必要,增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数
注:Array