这是一个队列的简单实现,同时也实现了Iterable接口。代码较简单,比起JDK自带的队列实现,简直弱爆了。但本人主要是为了复习数据结构而已,个人觉得还是有一定参考价值的,有兴趣的看一看吧。
具体实现代码如下:
import java.util.Iterator; import java.util.NoSuchElementException; public class Queue<T> implements Iterable<T> { private Node<T> first; private Node<T> last; private int size; private static class Node<T> { private T item; private Node<T> next; } public Queue() { first = null; last = null; size = 0; } public boolean isEmpty() { return first == null; } public void enqueue(T t) { Node<T> oldLast = last; last = new Node<T>(); last.item = t; last.next = null; if (isEmpty()) { first = last; } else { oldLast.next = last; } size++; } public T dequeue() { if (isEmpty()) throw new NoSuchElementException("队列为空"); T item = first.item; first = first.next; size--; if (isEmpty()) last = null; return item; } public T peek() { if (isEmpty()) throw new NoSuchElementException("队列为空"); return first.item; } public int size() { return size; } @Override public Iterator<T> iterator() { return new QueueIterator<T>(first); } /** * 队列的迭代器实现 */ private class QueueIterator<T> implements Iterator<T> { private Node<T> current; public QueueIterator(Node<T> current) { this.current = current; } @Override public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } @Override public T next() { if (!hasNext()) throw new NoSuchElementException(); T item = current.item; current = current.next; return item; } } public String toString() { StringBuilder s = new StringBuilder(); for (T item : this) s.append(item + " -> "); return s.toString() + null; } public static void main(String... args) { Queue<String> queue = new Queue<String>(); queue.enqueue("I"); queue.enqueue("am"); queue.enqueue("a"); queue.enqueue("hero"); System.out.println(queue); System.out.println("队列的大小是" + queue.size); Iterator<String> iterator = queue.iterator(); iterator.forEachRemaining(t -> System.out.println("[ " + t + "]")); queue.dequeue(); System.out.println(queue); System.out.println("队列的大小是" + queue.size); queue.dequeue(); System.out.println(queue); System.out.println("队列的大小是" + queue.size); queue.dequeue(); System.out.println(queue); System.out.println("队列的大小是" + queue.size); queue.dequeue(); System.out.println(queue); System.out.println("队列的大小是" + queue.size); queue.dequeue(); System.out.println(queue); System.out.println("队列的大小是" + queue.size); } }