1

以下のインターフェースに基づいて、Stack の 2 つの実装を作成しました。

public interface Stack<T>{
   public void push(T t);
   public T pop();
   public boolean isEmpty();
}

最初の実装では要素のコンテナーとして ArrayList を使用し、2 番目の実装では LinkedList を使用します。基礎となるコンテナごとに個別の実装を持つ方が良いですか、それともコンテナから独立したスタック実装を 1 つだけ持つ方が良いですか?

サンクス。

4

2 に答える 2

0

さまざまな状況で 1 つの実装が他の実装よりも優れている場合は、両方の実装を使用する必要があります。

ただし、スタックの場合、push()、pop()、および isEmpty() しかない場合、LinkedList と ArrayList のどちらも時間の複雑さの点で優れているとは言えません。したがって、選択した実装を 1 つだけ持つことができます。

push()、pop()、および isEmpty() の定数時間の複雑さ:

ArrayList の使用: 常にリストの一番下に追加し、一番下から削除します。

LinkedList の使用: 常にリストの先頭に追加し、先頭から削除します。

于 2013-04-15T20:26:04.947 に答える
0

質問に答える前に、インターフェイスを使用した場合は、次のようにインターフェイス名の前に「I」を追加します。

注意を実装するクラスごとにインターフェイスを使用する場合、当然、クラスごとにインターフェイスのメソッドを書き直す必要があります。なぜなら、インターフェースは、いくつかのクラスによってインターフェースが継承されるまで、そこにメソッドを実装していませんでした。コンテナの実装については言及されていません。

例:

class YourStackOne<T>: IStack<T>
{
//Container
LinkedLink<T> ContainElement;

public void push(T t){//implementation for YourStackOne..}
public T pop(){//implementation for YourStackOne..}
public boolean isEmpty{//implementation for YourStackOne..}
}

class YourStackTwo: IStack<int>
{
//Container
ArrayList ContainElement;

public void push(int t){//implementation for YourStackTwo..}
public int pop(){//implementation for YourStackTwo..}
public boolean isEmpty{//implementation for YourStackTwo..}
}

ところで、.NET で書いているのなら、Stack クラスを使ってみませんか?

于 2012-11-15T23:32:49.730 に答える