2011-02-05 17 views
1

現在、私はaddFirstremoveFirstの3つのコマンドでスタックとして使用する文字列またはintの3つのリンクされたリストを持つクラスを持っています。 (下に再現されるクラス)LinkedListを優先度キューに変更する

クラスをプライオリティキューとして代わりに使用する機能を追加したいと考えています。私は優先キューであることを知っているので、insertWithPriorityremoveNextを追加する簡単な方法を探しています。

代わりに、3つのlinkedListsのクラスを3つのpriorityQueuesに切り替えるのが直感的なオプションですが、私はJavaで優先度キューを使用する方法を少し混乱させています。 具体的にはの場合、removeNextがinsertWithPriorityで追加された同じ3つの要素を削除するように、すべての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(); 
    } 
} 

答えて

1

PriorityQueue同等またはコンパレータを使用して優先順位付けを提供しています、すなわち、あなただけの追加を使用します。

あなたの場合、foo、bar、etalを1つのオブジェクトにキャプチャするには、単純な静的内部クラスを使用することをお勧めします。値がfoo場合

static class FooBar implements Comparable<FooBar> { 
    String foo; 
    int bar, etal; 

    int compareTo(FooBar other) { 
    ... comparison logic here... 
    } 

} 

は、バー、らは、暗黙のうち優先順位が含まれていない、あなたはFooBarのに別のフィールドを追加し、compareToにそれを使用する必要があります。

+0

次に、FooBar型の単一の優先度キューを作成し、add(オブジェクト)を使ってそれらをすべて追加し、poll()で最も優先度の高いオブジェクトを取得できますか? –

+0

あなたはそれを持っています。 compareToがアイテムの実際の順序を反映していることを確認してください。 –

+0

さて、私はそれを撃つだろう。最悪の場合、私は誤って逆優先度キューを作成します。 –

関連する問題