首页 > 代码库 > java集合之List

java集合之List

List接口
List接口代表一个有序的集合,集合中每个元素都有其相对应的顺序索引。List允许使用重复元素,通过索引来访问指定位置的集合元素。默认以添加元素顺序为索引。

相对于Set集合,List可以通过索引来插入,替换,删除元素。

List判断两个对象相等的标准是equals方法返回true。

使用示例:
import java.util.ArrayList;
import java.util.List;

public class TestList {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  List books = new ArrayList();
  books.add("book1");
  books.add("book2");
  books.add("book3");
  System.out.println(books);
  books.add(1, "dog");
  for(int i = 0; i < books.size();i++){
   System.out.println(books.get(i));
  }
  books.remove(2);
  System.out.println(books);
  //判断元素在集合中的位置
  System.out.println(books.indexOf(new String("book3")));
  //替换元素
  books.set(0, new String("duck"));
  System.out.println(books);
  //输出子集
  System.out.println(books.subList(1, 2));
 }

}
上例中set(int index,Object element)方法不会改变List的长度,即index必须小于集合的长度

List提供一个listIterator()方法,该方法返回一个ListIterator对象,此对象所在类实现的接口继承了Iterator接口,提供专门操作List的方法。
示例:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class TestListIterator {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String[] books = {"book1","book2","book3"};
  List booklist = new ArrayList();
  
  for(int i = 0 ;i < books.length; i++){
   booklist.add(books[i]);
  }
  ListIterator li = booklist.listIterator();
  System.out.println("=============正向迭代==============");
  while(li.hasNext()){
   System.out.println(li.next());
  }
  System.out.println("============反向迭代=============");
  while(li.hasPrevious()){
   System.out.println(li.previous());
  }
 }

}

ArrayList和Vector都实现了List接口

ArrayList和Vector的区别
Vector有很多方法重复,有很多缺点
Vector线程安全,ArrayList则是不安全的
Vector提供一个Stack子类,模拟了栈功能

Arrays.ArrayList是一个固定长度的List集合,与ArrayList集合不同,程序只能遍历访问Arrays.ArrayList集合,不可添加、删除、该集合里的元素。

Queue接口模拟了队列数据结构,有LinkeList和PriorityQueue两个实现类。

LinkedList也实现了List接口,同时实现了Queue接口,所有该类功能异常强大,可以当成队列使用,还可以被当成List使用
示例:
import java.util.LinkedList;

public class TestLinkedList {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  LinkedList books = new LinkedList();
  //将字符串加入队列的尾部
  books.offer("book1");
  System.out.println(books);
  books.offer("book2");
  System.out.println(books);
  for(int i = 0; i< books.size(); i++){
   System.out.println(books.get(i));
  }
  //访问、并不删除队列里的第一个元素
  System.out.println(books.peek());
  System.out.println(books);
  //访问、并删除队列里的第一个元素
  System.out.println(books.poll());
  System.out.println(books);
 }

}

ArrayList和Vector以数组形式存储,所以随机访问集合元素性能出色;LinkedList以链表形式存储,随机访问性能差,当插入、删除元素性能出色。Vector实现了线程同步功能,各方面性能都较ArrayList有所下降。

PriorityQueue是一个以元素大小重新排序的队列
不允许插入null,默认为自然排序。

java集合之List