2012-01-05 29 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

如果您調整setNextsetPrevious方法不僅更新自己的實例,但也被設置爲nextprevious你想不得不依靠外部機制的實例。

因此,假設您最初創建了BusAB。當您撥打A.setNext(B)時,它也應更新B的前一個節點,而無需致電B.setPrevious(A)。與在Java中添加內容到LinkedList時類似,您不必手動設置最後一個對象與剛剛添加的對象之間的鏈接。像

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

當然東西,那麼你還是要考慮將總線已經包含在另一個List,你必須更新List以及場景。

因此,如其他響應之一所示,將節點與實際總線實例分開的建議是更好的主意。這使您可以將總線添加到多個列表中,並且可能更容易編寫您的循環列表(或僅使用列表的可用實現)。這也是更好的OO設計,因爲您可以重複使用您編寫的列表。

1

只是一個想法,但也許有一個類的節點和一個列表。通過這種方式,可以爲節點類構造一個構造函數,以處理設置其下一個和最後一個引用。這使得列表真的只需要擔心標準列表功能,如Add()

看看列表界面。

+0

我知道,但我需要訪問前一個和下一個節點,而不是列表的控制器... – ciembor 2012-01-05 22:58:33

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 2012-01-05 23:00:52

+0

是的,一個新的對象應該在最後一個和第一個之間。你需要改變總線的實現來自動完成。 – jenaiz 2012-01-06 14:30:47

0

爲什麼你需要一個數組?您已經在每個對象中都有引用。

相關問題