[英]Changing a LinkedList into a Priority Queue
我目前有一個具有3個字符串或整數鏈接列表的類,我可以通過addFirst
和removeFirst
命令的三重奏將addFirst
用作堆棧。 (類轉載如下)
我想添加使用該類作為優先級隊列的功能。 我知道一個優先級隊列是什么,所以我在尋找一種簡單的方式來增加insertWithPriority
和removeNext
。
直觀的選擇是從3個鏈表的類切換為3個PriorityQueues,但是我有點困惑如何在Java中使用優先級隊列。 具體來說 ,我需要使這3個功能均具有相同的優先級,以便removeNext將刪除insertWithPriority
添加的相同3個元素。
有人可以闡明如何實現適當的priorityQueue嗎?
class ThreeList{
public LinkedList foo;
public LinkedList bar;
public LinkedList etal;
public ThreeList(){
foo= new LinkedList();
bar= new LinkedList();
etal= new LinkedList();
}
public void addLast(String foo, int bar, int etal){
foo.addLast(foo);
bar.addLast(bar);
etal.addLast(etal);
}
public void addFirst(String foo, int bar, int etal){
foo.addFirst(foo);
bar.addFirst(bar);
etal.addFirst(etal);
}
public void removeFirst(){
foo.removeFirst();
bar.removeFirst();
etal.removeFirst();
}
public void removeLast(){
foo.removeLast();
bar.removeLast();
etal.removeLast();
}
}
PriorityQueue
通過使用Comparable或Comparator提供PriorityQueue
,即,您僅使用add。
在您的情況下,最好使用簡單的靜態內部類將foo,bar和etal捕獲到一個對象中。
static class FooBar implements Comparable<FooBar> {
String foo;
int bar, etal;
int compareTo(FooBar other) {
... comparison logic here...
}
}
如果值foo,bar,etal沒有隱式包含優先級,則需要向FooBar添加另一個字段,並在compareTo
使用該字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.