List
public interface List<E> extends Collection<E>
有序的 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<list.size();i++){
System.out.print(list.get(i)+" ");
}
//遍历2
for(String str:list){
System.out.print(str+" ");
}
Iterator<String> car = list.iterator();
while(car.hasNext()){
System.out.print(car.next()+" ");
}
三、List集合常用实现类
- java.util.LinkedList
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, 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()
移除并返回此列表的最后一个元素。
- java.util.ArrayList
构造方法摘要
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<?extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该collection的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。
四、Vector类
public class Vector<E> extends AbstractList<E>
implements List<E>, 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较为安全