1. 概述

2. 用法

LinkedList 有两个构造方法:一个是默认的构造方法,另一个是接受已有的 Collection,定义如下:

  1. public LinkedList(){
  2. }
  3. public LinkedList(Collection<? extends E> c) {
  4. this();
  5. addAll(c);
  6. }

我们可以这样创建 LinkedList 对象,例如:

  1. LinkedList<String> list = new LinkedList();
  2. LinkedList<String> names = new LinkedList(Arrays.asList("ken","shaw","james"));

2.1 作为队列使用

与生活中的排队类似,特点是先进先出,在尾部添加元素,从头部删除

  1. public interface Queue<E> extends Collection<E> {
  2. /**
  3. 在尾部追加元素
  4. @throw IllegalStateException 如果队列满了的时候,会抛出该异常
  5. */
  6. boolean add(E e);
  7. /**
  8. 在尾部追加元素
  9. @return false:如果队列满了的时候返回 false,反之返回 true
  10. */
  11. boolean offer(E e);
  12. /**
  13. 删除头部元素,返回头部元素,并且从队列中删除
  14. @throw NuSuchElementException 在队列为空的时候抛出该异常
  15. */
  16. E remove();
  17. /**
  18. 删除头部元素,返回头部元素,并从队列中删除
  19. 如果队列为空,返回特殊值null
  20. */
  21. E poll();
  22. /**
  23. 返回头部元素,但不改变队列
  24. @throw NuSuchElementExceptio 在队列为空的时候抛出该异常
  25. */
  26. E element();
  27. /**
  28. 返回头部元素,但不改变队列
  29. 如果队列为空,返回特殊值 null
  30. */
  31. E peek();
  32. }
  1. public static void queue(){
  2. Queue<String> queue = new LinkedList<>();
  3. queue.offer("a");
  4. queue.offer("b");
  5. queue.offer("c");
  6. while(queue.peek() != null){
  7. System.out.println(queue.poll());
  8. }
  9. }

2.2 作为栈使用

后进先出,类似于放书,放的时候一件一件堆上去

  1. public interface Deque<E> extends Queue<E> {
  2. /**
  3. 入栈,在头部追加元素
  4. @throw IllegalStateException 如果栈满了抛出该异常
  5. */
  6. void push(E e);
  7. /**
  8. 返回头部元素,并从栈中删除
  9. @throw NosuchElementException 如果栈为空抛出此异常
  10. */
  11. E pop();
  12. /**
  13. 查看栈头部元素,不修改栈,如果栈为空,返回 null
  14. */
  15. E peek();
  16. }
  1. public static void stack(){
  2. Deque<String> stack = new LinkedList<>();
  3. stack.push("a");
  4. stack.push("b");
  5. stack.push("c");
  6. while(stack.peek() != null){
  7. System.out.println(stack.poll());
  8. }
  9. }

2.2.1 Stack

2.2.2 语义明确的API
  1. void addFirst(E e);
  2. void addLast(E e);
  3. E getFirst();
  4. E getLast();
  5. boolean offerFirst(E e);
  6. boolean offerLast(E e);
  7. E peekFirst();
  8. E peekLast();
  9. E pollFirst();
  10. E pollLast();
  11. E removeFirst();
  12. E removeLast();

队列为空时,get/remove 会抛出异常,而 peek/poll 会返回 null。队列满时候 add 会抛出异常,offer 会返回 false

Deque 接口还有一个迭代器方法,可以从后往前遍历:

  1. public static void iteration() {
  2. Deque<String> names = new LinkedList<>();
  3. names.addLast("ken");
  4. names.addLast("shaw");
  5. names.addLast("james");
  6. Iterator<String> iterator = names.descendingIterator();
  7. while(iterator.hasNext()){
  8. System.out.println(iterator.next());
  9. }
  10. }