大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: LinkedList

List类是以对象加入(add)容器的顺序来排列它们,如果您的对象加入之后大都是为了取出,而不会常作移除或插入(Insert)的动作,则使用ArrayList,如果您会经常从容器中作移除或插入对象的动作,则使用LinkedList会获得较好的效能。

LinkedList实现了List接口,并增加了一些移除与插入对象的特定方法,像是addFirst()、addLast()、 getFirst()、getLast()、removeFirst( )、removeLast()等等,由于在插入与移除时有较好的效能,适合拿来实现堆(Stack)与伫列(Queue)。

以下实现一个简单的FILO(First-In, Last-Out)堆,可以存入字符串:

  • StringStack.java
package onlyfun.caterpillar;

import java.util.*;

public class StringStack {
private LinkedList<String> linkedList;

public StringStack() {
linkedList = new LinkedList<String>();
}

public void push(String name) {
linkedList.addFirst(name);
}

public String top() {
return linkedList.getFirst();
}

public String pop() {
return linkedList.removeFirst();
}

public boolean isEmpty() {
return linkedList.isEmpty();
}
}

而对于FIFO(First-In, First-Out)的伫列,我们也可以使用LinkedList来实现:
  • StringQueue.java
package onlyfun.caterpillar;

import java.util.*;

public class StringQueue {
private LinkedList<String> linkedList;

public StringQueue() {
linkedList = new LinkedList<String>();
}

public void put(String name) {
linkedList.addFirst(name);
}

public String get() {
return linkedList.removeLast();
}

public boolean isEmpty() {
return linkedList.isEmpty();
}
}

事实上,如果您要使用伫列的功能,您也不用亲自实现,在J2SE 5.0中,LinkedList也实现了新加入的java.util.Queue接口,这个接口有五个必须实现的方法:
element() 取得但不移除伫列第一个组件,伫列为空时会丢出异常
offer() 加入一个元素至伫列中
peek() 取得但不移除伫列第一个组件
poll() 取得并移去伫列第一个组件,伫列为空时传回null
remove() 取得并移除伫列第一个组件

要使用伫列的功能,您只要类似这样的声明:
Queue<String> queue = new LinkedList<String>();