簡體   English   中英

將LinkedList更改為優先級隊列

[英]Changing a LinkedList into a Priority Queue

我目前有一個具有3個字符串或整數鏈接列表的類,我可以通過addFirstremoveFirst命令的三重奏將addFirst用作堆棧。 (類轉載如下)

我想添加使用該類作為優先級隊列的功能。 我知道一個優先級隊列什么,所以我在尋找一種簡單的方式來增加insertWithPriorityremoveNext

直觀的選擇是從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM