List 接口是一个有序可重复集合,List集合默认按元素的添加顺序来设置元素的索引,可以通过索引来访问指定位置的元素(顺序索引从0开始)。List 接口继承Collection接口,实现了Collection的所有方法,凡是可操作角标的方法都是List特有的方法:
List是接口,同时也拥有自己的具体实现类, ArrayList,LinkedList,Vector。
ArrayList
底层数据结构是数组结构,线程不安全,特点:查询速度很快
LinkedList
LinkedList底层数据结构是链表,线程不安全,特点是增删速度很快,查询速度稍慢。
LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
- /*
- 使用LinkedList模拟堆栈和队列
- 堆栈:先进后出(被子) FILO
- 队列:先进先出(水管) FIFO
- */
- import java.util.*;
- import static java.lang.System.*;
- class LinkedListDemo
- {
- public static void main(String[] args)
- {
- DuiLie dl = new DuiLie();
- dl.myAdd("java01");
- dl.myAdd("java02");
- dl.myAdd("java03");
- dl.myAdd("java04");
-
- out.println("先进后出:");
- while(!dl.isNull()){
- out.println(dl.myGetFILO());
- }
- /*out.println("先进先出:");
- while(!dl.isNull()){
- out.println(dl.myGetFIFO());
- }*/
- }
- }
- class DuiLie
- {
- private LinkedList list;
-
- public DuiLie(){
- list = new LinkedList();
- }
- public void myAdd(Object obj){
- list.offerFirst(obj);
- }
- public Object myGetFIFO(){//先进先出
- return list.removeLast();
- }
- public Object myGetFILO(){//先进后出
- return list.removeFirst();
- }
- public boolean isNull(){
- return list.isEmpty();
- }
- }
复制代码Vector
底层数据结构是数组结构,线程安全,与Arraylist、LinkedList相比,操作效率低
关于使用List集合的几点建议:
•如果需要遍历List集合元素,对应ArrayList、Vector集合,则应该使用随机访问方法(get)来遍历集合元素,这样性能更好。对应LinkedList集合,则应采用迭代器(Iterator)来遍历集合元素。
•如果需要经常执行插入、删除操作来改变Lst集合大小,则应该使用LinkedList集合,而不是ArrayList。
•如果多条线程需要同时访问List集合中的元素,可以考虑使用Vector这个同步实现,或者考虑使用Collections工具类实现同步。