2015-07-01 115 views
0

我想創建一個數組,其中每個元素都是一個雙向鏈表。這是我到目前爲止有:雙列表列表

public ArrayOfLists() { 
    this.limit = limit; //limit of Nodes in each element of listArray 
    listArray = (DoublyLinkedList<E>[]) new DoublyLinkedList[3]; 
    listArray[0] = new DoublyLinkedList<E>(); 
    listArray[1] = new DoublyLinkedList<E>(); 
    listArray[2] = new DoublyLinkedList<E>(); 
    size = 0; 
} 

我不知道這是否是概念上是正確的,但我種認爲這是一個二維數組。我很困惑我如何去添加和刪除存儲在這個數組中的列表中的對象。例如,

public void add(E obj) { 
    //some stuff 
} 

public void remove(int index) { 
    //some stuff 
} 

我可以以某種方式訪問​​我的doublyLinkedList類中已經實現的方法來協助解決這個問題嗎?非常感謝。

+1

爲什麼不使用'DoublyLinkedList > listOfLists'?您可以通過listOfLists.add(DoublyLinkedList e)來訪問它們;'','listOfList.get(idx).add(E e);','listOfLists.get(idx); //返回一個DublyLinkedList ','listOfLists.get(idx1).get(idx2); //返回一個元素,... – Turing85

回答

0

我不知道你會用什麼邏輯弄清楚要你obj添加到陣列的插槽,但是這是你會怎麼做(實施後當然calculateArraySlotSomehow):

public void add(E obj) 
{ 
    int index = calculateArraySlotSomehow(obj); 

    listArray[index].add(obj); 
} 

根據您的意見,您可以實現calculateArraySlotSomehow是這樣的:

private int calculateArraySlotSomehow(E obj) 
{ 
    // 'count' is the total number of elements that are already 
    //   stored in this data structure 
    // 'size' is the number of array elements 
    // 'limit' is the number of elements per list 

    int slot = count/limit; 

    if (slot >= size) { 
     throw new IndexOutOfBoundsException("Index: " + slot + ", Size: " + size); 
    } 

    return slot; 
} 

然後你就會有你的add實現更改爲:

public void add(E obj) 
{ 
    int index = calculateArraySlotSomehow(obj); 

    listArray[index].add(obj); 

    count++; 
} 

請注意,這不是線程安全的。

我很好奇你究竟在做什麼,因爲我有一種感覺,你可能會走出複雜的事情。

+0

這很有道理。我怎麼能計算陣列槽?我有一個int大小(數組的大小)和一個int限制(雙鏈表的大小)。我會假設只有一堆條件來檢查我是否在這些範圍之外添加了某些東西? – EchoServ

+0

我已經更新了我的答案。 –