Java中的LinkedList

LinkedList类扩展AbstractSequentialList并实现List接口。它提供了一个链表数据结构。

以下是LinkedList类支持的构造函数。

序号构造函数与说明
1LinkedList()
这个构造函数建立一个空的链表。
2LinkedList(Collection c)
此构造函数构建一个链表,该链表使用集合c的元素初始化。

除了从其父类继承的方法外,LinkedList还定义以下方法。

序号方法与说明
1void add(int index,Object element)
将指定的元素插入此列表中指定位置的索引处。如果指定的索引超出范围(index <0 || index> size()),则抛出IndexOutOfBoundsException 。
2boolean add(Object o)
将指定的元素追加到此列表的末尾。
3boolean addAll(Collection c)
将指定集合中的所有元素按指定集合的迭代器返回的顺序追加到此列表的末尾。如果指定的集合为null,则抛出NullPointerException。
4boolean addAll(int index,Collection c)
从指定位置开始,将指定集合中的所有元素插入此列表。如果指定的集合为null,则抛出NullPointerException。
5void addFirst(Object o)
将给定元素插入此列表的开头。
6void addLast(Object o)
将给定元素追加到此列表的末尾。
7voidclear()
从此列表中删除所有元素。
8Objectclone()
返回此LinkedList的浅表副本。
9boolean contains(Object o)
如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素(e == null?e == null:o.equals(e))时,返回true。
10Object get(int index)
返回此列表中指定位置的元素。如果指定的索引超出范围(索引<0 ||索引> = size()),则抛出IndexOutOfBoundsException 。
11对象getFirst()
返回此列表中的第一个元素。如果此列表为空,则抛出NoSuchElementException。
12对象getLast()
返回此列表中的最后一个元素。如果此列表为空,则抛出NoSuchElementException。
13int indexOf(Object o)
返回指定元素首次出现在此列表中的索引;如果列表不包含此元素,则返回-1。
14int lastIndexOf(Object o)
返回指定元素最后一次出现在此列表中的索引;如果列表不包含此元素,则返回-1。
15ListIterator listIterator(int index)
从列表中的指定位置开始(按适当顺序返回此列表中元素的列表迭代器。如果指定的索引超出范围(索引<0 ||索引> = size()),则抛出IndexOutOfBoundsException 。
16Object remove(int index)
移除此列表中指定位置的元素。如果此列表为空,则抛出NoSuchElementException。
17boolean remove(Object o)
移除此列表中第一次出现的指定元素。如果此列表为空,则抛出NoSuchElementException。如果指定的索引超出范围(索引<0 ||索引> = size()),则抛出IndexOutOfBoundsException 。
18岁对象removeFirst()
从此列表中删除并返回第一个元素。如果此列表为空,则抛出NoSuchElementException。
19ObjectremoveLast()
删除并返回此列表中的最后一个元素。如果此列表为空,则抛出NoSuchElementException。
20Object set(int index,Object element)
用指定的元素替换此列表中指定位置的元素。如果指定的索引超出范围(索引<0 ||索引> = size()),则抛出IndexOutOfBoundsException 。
21intsize()
返回此列表中的元素数。
22Object []toArray()
返回以正确顺序包含此列表中所有元素的数组。如果指定的数组为null,则抛出NullPointerException。
23Object [] toArray(Object [] a)
以正确的顺序返回包含此列表中所有元素的数组。返回数组的运行时类型是指定数组的运行时类型。

示例

下面的程序说明了LinkedList支持的几种方法。

import java.util.*;
public class LinkedListDemo {
   public static void main(String args[]) {
      //创建一个链表
      LinkedList ll = new LinkedList();
      //将元素添加到链接列表
      ll.add("F");
      ll.add("B");
      ll.add("D");
      ll.add("E");
      ll.add("C");
      ll.addLast("Z");
      ll.addFirst("A");
      ll.add(1, "A2");
      System.out.println("Original contents of ll: " + ll);
      //从链接列表中删除元素
      ll.remove("F");
      ll.remove(2);
      System.out.println("Contents of ll after deletion: " + ll);
      //删除第一个和最后一个元素
      ll.removeFirst();
      ll.removeLast();
      System.out.println("ll after deleting first and last: " + ll);
      //获取并设置一个值
      Object val = ll.get(2);
      ll.set(2, (String) val + " Changed");
      System.out.println("ll after change: " + ll);
   }
}

输出结果

Original contents of ll: [A, A2, F, B, D, E, C, Z]
Contents of ll after deletion: [A, A2, D, E, C, Z]
ll after deleting first and last: [A2, D, E, C]
ll after change: [A2, D, E Changed, C]