public interface List extends Collection
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
从以下版本开始: 1.2
特点: 有序、带索引、可重复
一、List 接口提供了 4 种对列表元素进行定位(索引)访问方法:
void add(int index, E element)
在列表的指定位置插入指定元素(可选操作)。
E get(int index)
返回列表中指定位置的元素。
E remove(int index)
移除列表中指定位置的元素(可选操作)。
E set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)。
二、关于list集合的遍历:
//遍历1
for(int i = 0 ;i
//遍历2
for(String str:list){
System.out.print(str+" ");
}
Iterator car = list.iterator();
while(car.hasNext()){
System.out.print(car.next()+" ");
}
三、List集合常用实现类
public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable
特点:
1.底层是链表结构:查询慢,增删快
2.里边包含大量操作首尾元素
注意:使用LinkedList集合特有的的方法时,不能使用多态
LinkedList特有方法:
void addFirst(E e)
将元素插入此列表的开头。
void push(E e)
将元素推入此列表所表示的堆栈。底层调用了addFirst方法
void addLast(E e)
将元素添加到此列表的结尾。
E getFirst()
返回此列表的第一个元素。
E peek()
获取但不移除此列表的头(第一个元素)。
E getLast()
返回此列表的最后一个元素。
E removeFirst()
移除并返回此列表的第一个元素。
E pop()
从此列表所表示的堆栈处弹出一个元素。(第一个元素)
E removeLast()
移除并返回此列表的最后一个元素。
构造方法摘要
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该collection的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
四、Vector类
public class Vector extends AbstractList
implements List, RandomAccess, Cloneable, Serializable
JDK1.0
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作
五、ArrayList、LinkedList、Vector区别
ArrayList 底层采用数组,可以使用索引查询、添加、删除元素,是一个不同步的类(unsynchronized),即不安全。因为使用数组,所以查询速度快,而添加、删除慢。默认初始容量为10,超过原始容量时扩容方式为原来容量的1.5倍(每次扩充空间的大小可以设置)
int newCapacity = oldCapacity + (oldCapacity >> 1);
LinkedList底层采用双向链表,对头尾结点进行操作速度快,对数据的索引查找需从头结点开始,速度访问,而插入、删除不需要对数据进行移动,速度会快。一个不同步的类(unsynchronized),即不安全。
Vector底层是数组结构,是一个线程安全的类,方法被synchronized修饰。Vector默认扩充为原来的两倍(每次扩充空间的大小可以设置),正是由于Vector提供了线程安全的机制,其性能上也要稍逊于ArrayList。Vector版本开始于jdk1.0
对容器的选择:
当对数据的主要操作是索引或只在集合的末端增加、删除元素时,使用ArrayList或Vector效率比较高,
当对数据的操作主要为指定位置或删除操作时,使用LikedList效率比较高;当在多线程中使用容器时,选用Vector较为安全