0

オブジェクトの循環リストが必要です。そして、それぞれが前か次かを知る必要があります。これは私がしました:

class Bus {

    private Bus previous;
    private Bus next;

    public Bus() {
      //anything
    }

    public void setPrevious(Bus bus) {
      this.previous = bus;
    }

    public void setNext(Bus bus) {
      this.next = bus;
    }

    private void someMethod() {
     // if (previous.xxx() && next.xxx()) {
     //   do something
     // } 
    }

}

そして、バスの配列を作成しました。すべてのバスを追加した後、各要素の次と前を設定します。そして、私はそれが醜いと感じます:D。もっと良い方法を提案してもらえますか?

4

4 に答える 4

1

考えただけですが、ノード用に1つ、リスト用に1つのクラスがあるかもしれません。このようにして、次と最後の参照の設定を処理するノードクラスのコンストラクターを作成できます。これにより、リストは実際にはのような標準のリスト関数についてのみ心配する必要がありますAdd()

リストインターフェイスを見てください。

于 2012-01-05T22:52:50.890 に答える
1

リンクリストには配列は必要ありません。リストを作成するには、次と前のメソッドを使用してオブジェクトを接続し、最後のメソッドを最初のメソッドに接続する必要があります(循環を行うため)。そして使用例(実装を使用):

Bus one = new Bus();
Bus two = new Bus();
Bus three = new Bus();

one.setPrevious(three);
one.setNext(two);

two.setPrevious(one);
two.setNext(three);

three.setPrevious(two);
three.setNext(one);

それは多かれ少なかれリンクリストサーキュラーのアイデアです。リンクリストを理解するために、別の質問を参照することをお勧めします。それを循環させるのは簡単です。

于 2012-01-05T22:53:00.437 に答える
1

setNextメソッドとメソッドを調整して、インスタンスを更新するだけでなく、必要に応じて設定されsetPreviousたインスタンスも外部メカニズムに依存する必要があります。nextprevious

Bus A最初に and を作成したとしましょうB。を呼び出すと、を呼び出さなくてA.setNext( B )も、 の前のノードも更新されます。Java でに何かを追加する場合と同様に、最後のオブジェクトと追加したばかりのオブジェクトとの間のリンクを手動で設定する必要はありません。何かのようなものBB.setPrevious( A )LinkedList

public void setPrevious(Bus bus) {
  this.previous = bus;
  if ( bus.next != this ){
    bus.next = this;
  }
}

もちろん、バスがすでに別のバスに含まれているシナリオも考慮する必要があり、Listそれも更新する必要がListあります。

したがって、他の応答の 1 つで提案されているように、ノードを実際のバス インスタンスから分離することを提案することをお勧めします。これにより、バスを複数のリストに追加できるようになり、循環リストを作成するのがおそらく簡単になります (または、リストに利用可能な実装を使用するだけです)。これは、作成したリストを再利用できるため、より優れた OO 設計でもあります。

于 2012-01-05T23:24:47.893 に答える
0

なぜ配列が必要なのですか?各オブジェクトにはすでに参照があります。

于 2012-01-05T22:54:04.460 に答える