2012-01-05 18 views
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。あなたは私により良い方法を提案してもいいですか?

答えて

1

は、あなたはそれらのインスタンスだけでなく、nextとして設定し、previousとしてあなたが外部機構に依存する必要が欲しいれるインスタンスを更新するだけでなく、あなたのsetNextsetPrevious方法を調整した場合。

最初にBusABを作成したとします。 A.setNext(B)に電話すると、B.setPrevious(A)に電話することなく、前のノードBも更新する必要があります。 JavaのLinkedListに何かを追加した場合と同様に、最後のオブジェクトと追加したばかりのオブジェクトの間のリンクを手動で設定する必要はありません。

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

のようなものは、あなたはまだバスがすでにあなたにもそのListを更新する必要があり、別のListに含まれているシナリオを検討する必要があります。

したがって、他の応答の1つで提案されているように、ノードを実際のバスインスタンスから分離することの方が良い考えです。これにより、複数のリストにバスを追加することができ、サーキュラーリストを書くほうが簡単になります(または、リストに利用可能な実装を使用するだけです)。これは、あなたが書いたリストを再利用できるように、より良いOO設計です。

1

ちょっと考えましたが、おそらくノード用に1つのクラスとリスト用に1つのクラスがあります。このようにして、次と最後の参照の設定を処理するノードクラスのコンストラクタを持つことができます。これにより、リストは実際にはAdd()のような標準リスト機能について心配する必要があります。

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

+0

私は知っていますが、ノードの前と次のものにアクセスする必要があります。リストのコントローラではありません。 – ciembor

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); 

多かれ少なかれ、リンクリストの考え方は多かれ少なかれです。私はseeにリンクされたリストを理解する別の質問をすることをお勧めします。円形にするのは簡単です。

+0

しかし、N個のノードが必要です。円形のリストでは、新しいオブジェクトをどこに置くべきかわかりません。それは最後と最初の間でなければなりません。 – ciembor

+0

はい、新しいオブジェクトは最後と最初の間にある必要があります。自動的に行うには、Busの実装を変更する必要があります。 – jenaiz

0

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

関連する問題