首页 > 编程笔记 > Java笔记 阅读:7

Java中的List接口(非常详细)

Java 中的 List 接口是 Collection 接口的子接口,实现一种顺序表的数据结构,有时也称为有序列表。

存放在 List 中的所有元素都有一个下标(从 0 开始),可以通过下标访问 List 中的元素。List 中可以包含重复元素。List 接口及其实现类的层次结构如下图所示。


图 1 List 接口及其实现类的层次结构

List 接口除了继承 Collection 的方法外,还定义了一些自己的方法。使用这些方法可以实现定位访问、查找、链式迭代和范围查看。

List 接口的定义如下:
public interface List<E> extends Collection<E> {
    // 定位访问
    E get(int index);
    E set(int index, E element);
    boolean add(E element);
    void add(int index, E element);
    E remove(int index);
    abstract boolean addAll(int index, Collection<? extends E> c);
    // 查找
    int indexOf(Object o);
    int lastIndexOf(Object o);
    // 迭代
    ListIterator<E> listIterator();
    ListIterator<E> listIterator(int index);
    // 范围查看
    List<E> subList(int from, int to);
}
在集合框架中,实现列表接口(List<E>)的是 ArrayList 类和 LinkedList 类。这两个类定义在 java.util 包中。

ArrayList 类通过数组方式实现,相当于可变长度的数组。LinkedList 类则通过链表结构来实现。这两个类的实现方式不同,使得相关操作方法的代价也不同。一般说来,若对一个列表结构的开始和结束处有频繁地添加和删除操作时,选用 LinkedList 类所实例化的对象表示该列表。

Java ArrayList类

ArrayList 类是最常用的实现类,通过数组实现的集合对象。

ArrayList 类实际上实现了一个变长的数组,其元素可以动态地增加和删除。它的定位访问时间是常量时间。

ArrayList 类的构造方法如下:
【实例 1】创建一个 ArrayListDemo 类,在其中创建一个 ArrayList 类集合,向集合中添加元素,然后输出所有元素。
import java.util.*;

public class ArrayListDem {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("collection");
        list.add("list");
        list.add("ArrayList");
        list.add("LinkedList");
        for (String s : list)
            System.out.println(s);
        list.set(3, "ArrayList");
        System.out.println("修改下标为 3 的元素后,列表中元素为:");
        for (String s : list)
            System.out.println(s);
    }
}
程序执行结果为:
collection
list
ArrayList
LinkedList
修改下标为 3 的元素后,列表中元素为:
collection
list
ArrayList
ArrayList

Java LinkedList类

如果需要经常在 List 类接口的头部添加元素,在 List 类接口的内部删除元素,就应该考虑使用 LinkedList 类。这些操作在 LinkedList 类中是常量时间,在 ArrayList 类中是线性时间。但定位访问在 LinkedList 类中是线性时间,而在 ArrayList 类中是常量时间。

LinkedList 类的构造方法如下:
通常利用 LinkedList 类对象表示一个堆栈(stack)或队列(queue)。对此 LinkedList 类中特别定义了一些方法,而这是 ArrayList 类所不具备的。这些方法用于在列表的开始和结束处添加和删除元素,其方法定义如下:
【实例 2】创建类 LinkedListDemo,在其中创建一个 LinkedList 类集合,对其进行各种操作。
import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> queue = new LinkedList<String>();
        queue.addFirst("set");
        queue.addLast("HashSet");
        queue.addLast("TreeSet");
        queue.addFirst("List");
        queue.addLast("ArrayList");
        queue.addLast("LinkedList");
        queue.addLast("map");
        queue.addFirst("collection");
        System.out.println(queue);
        queue.removeLast();
        queue.removeFirst();
        System.out.println(queue);
    }
}
程序执行结果为:
[collection, List, set, HashSet, TreeSet, ArrayList, LinkedList, map]
[List, set, HashSet, TreeSet, ArrayList, LinkedList]

相关文章