2013-04-11 96 views
0

我被困在包含泛型和ArrayList的任務中。該任務是通過定義一個優先級隊列類來實現一個優先級隊列,該隊列能夠保存任意類型的對象T,該優先級隊列類使用ArrayList實現隊列。要支持泛型和ArrayList實現優先級隊列

的方法是Add(item, priority)

,並根據優先級remove()消除在優先級列表最高的項目。

我創建了類型爲T的通用類,聲明爲private T data。使用多個構造函數來設置數據。現在我被困在如何使用這個類和使用ArrayList,因爲我不知道你可以add(string, integer)ArrayList更不用說遍歷它。

關於如何處理這個作業的任何提示和想法將不勝感激。

+2

可以以支持元素的對比使用'Comparable'和'Comparator'接口。請注意,在Java'PriorityQueue'類中[有一個構造函數接受'Comparator '](http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html#PriorityQueue% 28int,%20java.util.Comparator%29) – 2013-04-11 21:17:02

+0

檢查以下鏈接(「Queue」實現教程以及「PriorityQueue」,「Comparable」和「Comparator」的文檔):http://docs.oracle。 com/javase/tutorial/collections/implements/queue.html http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html http://docs.oracle.com/javase/ 7/docs/api/java/lang/Comparable.html http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html – Barranka 2013-04-11 21:21:10

+0

在SO中,您通常應該包含您擁有的代碼(可能會先清理它,如果它是凌亂的......),雖然作業可能有它自己的問題......還提示:你需要一個內部或嵌套的類,它將具有項目和優先級屬性。然後,您可以將此類的實例存儲在'ArrayList'中,您應該始終保持「手動」排序。 – hyde 2013-04-11 21:21:24

回答

1

您只需要將數據及其優先級包裝在另一個對象中,只在您的PriorityQueue內部使用(就像LinkedList使用包裝數據的節點和指向下一個節點的指針一樣)。

所以priorityQueue(T data, int priority)最終會被實現爲

Node node = new Node(data, priority); 
// find the position where the node must be inserted 
arrayList.add(position, node); 
+0

謝謝大家!如果我有更多問題,我會使用你的指導並回來! – N2910 2013-04-11 21:36:19