2011-06-30 12 views
2

優先度キューに要素を追加する方法をよくわかりません。私はコードが私にスプーンフィードになることを望んでいない、誰かが私にどのようにインターフェイスをパラメータとして渡されたインターフェイスを使用し、そのメソッドの1つを実装するクラスを説明することができます。私に指示を与えてください、私はそれを見て、このコードを実装する方法を学びます。別のインターフェイスでインターフェイスを使用する

QueueItemクラス

public interface QueueItem 

    { 

    /** 
    * Returns the priority of this item. The priority is guaranteed to be 
    * between 0 - 100, where 0 is lowest and 100 is highest priority. 
    */ 

    public int priority(); 

    } 

優先度つきキュークラス

public interface PriorityQueue 

    { 

    /** 
    * Inserts a queue item into the priority queue. 
    */ 
    public void insert(QueueItem q); 

    /** 
    * Returns the item with the highest priority. 
    */ 
    public QueueItem next(); 

} 

QuickInsertQueueクラス

public class QuickInsertQueue implements PriorityQueue { 

    @Override 
    public void insert(QueueItem q) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public QueueItem next() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 

のメソッドO(1)を持つPriorityQueue インターフェイスを実装するQuickInsertQueueクラスを記述する必要があります。

+0

この宿題ですか? –

+0

いいえ、これはあなたのスキルをオンラインでテストしています。私はスキルを向上させるためにこれをやりたいと思います。 – Daniel

+0

ここで助けが必要なのは不明です - O(1)アルゴリズムをどのように実装するのでしょうか?それは一般的にPriorityQueueインターフェイスを実装するクラスを書く方法ですか? 「別のインタフェースに渡されたインタフェースをパラメータとして使用する方法と、そのメソッドの1つを実装するクラス」という文は解析が難しいです。 –

答えて

2

あなたはすでに適切なトラックにいます。インタフェースが定義され、クラス定義に正しい実装が添付されています。あなたが実装したい次のステップは、実際にあなたのクラスにHashMapインスタンス変数を追加することです。これは、それが基礎となるストレージであるためです。また、インサートのメソッド実装では、変数をマップに追加します。

最終的には、Genericsについて読む必要があります。

+0

私はどのようにジェネリックスがこの特定の問題に関連して表示されません。 –

+0

彼はそのHashmap変数を定義しようとします。 – Perception

+0

どのようにHashMapsが相対的であるかはわかりません。 :)しかし、私はそれが作者が質問からそれを削除した理由だと思う。 –

0

受信したすべてのオブジェクトがインターフェイスに従って動作することを保証するために、インターフェイスを使用します。そのため、QuickInsertQueuePriorityQueueのメソッドを実装する必要があります。ただし、挿入されたオブジェクトについて使用できる唯一の情報は、QueueItemインターフェイス—に従って動作するということです。すなわち、メソッドがあり、intを返します。あなたの実装は、それが管理しているオブジェクトについて、それ以外には何も依存しません。

1

あなたが必要としていることを教えてください。私が持っているもう1つの提案は、挿入がO(1)になるように、正しいデータ構造を見つける必要があるということです。ヒープを見ることをお勧めします。具体的には、最小ヒープを見ることで、一定時間内に挿入することができます。 Look here。私はこれが役立つことを願っています

+0

どのようにしてpublic void insert(QueueItem q)を実装できますか?{ } TODO自動生成メソッドスタブ } – Daniel

0

あなたは正しい方向にあります。理想的な世界では、あなたが正しいコード・レベルの詳細に入ることなく、あなたはそれが(することになっている)か、自分で見つけ出す必要がありますので 、仕事がある -

  1. 異なる種類の間、システム内のすべての相互作用のオブジェクトは、インタフェースを使用して定義されます。つまり、「どのように物事が私のアプリケーションでやりとりするのか」を知る必要がある場合は、すべてのインターフェースを見る必要があります。 (他のすべては実装の詳細です。)つまり、すべての実際の作業はクラスによって行われます(つまり、インターフェイスを実装する)が、相互作用は、インタフェースによって定義されます。

  2. 1つの実装クラス。 QuickInsertQueueは、他の実装について何も知る必要はありません。 (例えば。つまり、QueueItemはPriorityQueueを実装しているクラスについて知る必要はなく、PriorityQueueはQueueItemを実装するクラスについて知る必要もありません。、実際に

(これが機能するために、またクラスは複数のインタフェースを実装することができますのでご注意インターフェースで他の人がそれと対話することを可能にするために必要なすべてのメソッドを持っていることを確認してください)

  • SpringまたはGuiceのようなものをfactory method patternやIoCコンテナのように使用しない限り、実装インスタンス(つまりクラスのオブジェクト)は他の実装(他のクラスのオブジェクト)をインスタンス化しますシステム。

(この場合、データ構造は、その挿入がなければならないので、使用するには、O(1)実装の詳細quuestion /議論である)

関連する問題