從頭認識java-15.6 隊列(Queue)
阿新 • • 發佈:2017-07-07
優先 tar bottom interface tails ont luci six linked
這一章節我們來討論一下隊列(Queue)。
1.什麽是隊列?
隊列是一種特殊的線性表,特殊之處在於它僅僅同意在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣。隊列是一種操作受限制的線性表。
2.特性
(1)元素是有序的
(2)元素是先進先出
3.java裏面的實現類:Linkedlist和PriorityQueue,兩者之間性能不存在區別,區別的地方是排序的行為。
package com.ray.ch14; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; public class Test { public static <T> void test(Queue<T> queue, Generator<T> generator, int count) { for (int i = 0; i < count; i++) { queue.add(generator.next()); } while (queue.peek() != null) { System.out.print(queue.remove() + " "); } System.out.println(); } public static void main(String[] args) { test(new LinkedList<String>(), new MyGenerator(), 10); test(new PriorityQueue<String>(), new MyGenerator(), 10); } } interface Generator<T> { T next(); } class MyGenerator implements Generator<String> { private String str = "one two three four five six seven eight nine ten eleven"; private int index = 0; @Override public String next() { if (index > str.split(" ").length) { return ""; } else { return str.split(" ")[index++]; } } }
輸出:
one two three four five six seven eight nine ten
eight five four nine one seven six ten three two
4.優先級隊列
排序對象實現Comparable接口就可以。
package com.ray.ch14; import java.util.PriorityQueue; import java.util.Random; public class Test { private static PriorityQueue<MyClass> priorityQueue = new PriorityQueue<MyClass>(); public static PriorityQueue<MyClass> test(int count) { for (int i = 0; i < count; i++) { priorityQueue.add(new MyClass(new Random().nextInt(10))); } return priorityQueue; } public static void main(String[] args) { System.out.println(test(10)); } } class MyClass implements Comparable<MyClass> { private int pri = 0; public MyClass(int pri) { this.pri = pri; } @Override public int compareTo(MyClass myClass) { if (this.pri < myClass.pri) { return -1; } else { if (this.pri == myClass.pri) { return 0; } else { return 1; } } } @Override public String toString() { return this.pri + ""; } }
輸出:
[0, 1, 3, 3, 2, 5, 5, 6, 6, 7]
5.雙向隊列
特點:能夠在不論什麽一段加入或者刪除元素。
因為在現有的java 裏面沒有實現雙向隊列的接口。可是在Linkedlist裏面事實上已經模擬出來了。因此我們使用組合來模擬一下。
class Deque<T> { private LinkedList<T> linkedList = new LinkedList<T>(); public void addFirst(T t) { linkedList.addFirst(t); } public void addLast(T t) { linkedList.addLast(t); } public void removeFirst() { linkedList.removeFirst(); } public void removeLast() { linkedList.removeLast(); } }
總結:這一章節主要講述隊列的概念、特點。以及優先級和雙向隊列。
這一章節就到這裏,謝謝。
-----------------------------------
文件夾
從頭認識java-15.6 隊列(Queue)