2012-08-07 21 views
1

大師,我很難傳遞一個雙向鏈表的數組作爲參數。Java:通過一個雙向鏈表的數組列表作爲參數

我需要在涉及鏈表的數據結構中表示方矩陣。我決定使用雙向鏈表的數組列表。從文本文件中讀取矩陣的信息,存儲在:

ArrayList<DoubleLinkedList<Integer>> dLLArrayList 

在第一輸入讀取後,dllArryList有內容"[[5]]"

我試圖通過調用定義自我的構造函數創建一個新的矩陣對象矩陣類:

Matrix mx1 = new Matrix (dimension, dLLArrayList); 

**尺寸僅僅是存儲矩陣的大小int變量,比如說1對於1由1矩陣,對輸入的文本文件所指示的。

然而,正如我嘗試打印出Matrix類內的基質含量,它返回"[[]]":

System.out.println (this.getMatrixArrayList()); 

這裏是假設設定Matrix對象的ArrayList的元素的矩陣類內的設置方法:

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) { 
    for(int i = 0; i < matrixArrayList.size(); i ++){ 
     for (int j = 0; j < matrixArrayList.get(i).size(); j ++) { 
      this.rowItemList.add(matrixArrayList.get(i).get(j)); 
     } 
     this.matrixArrayList.add(this.rowItemList); 
     this.rowItemList.clear(); 
    } 
} 

任何理由,這將無法正常工作?建議,評論?

+0

請正確格式化您的代碼... – oldrinb 2012-08-07 03:06:07

+0

感謝您的正面轉向,我只是更正了代碼格式。這是我在stackoverflow上的第一篇文章。 – Hank 2012-08-07 03:38:09

+0

它可能是我的程序的其他部分不是很有效。我會保持這張貼更新。 – Hank 2012-08-07 03:45:10

回答

2

問題是你清除了rowItemList。當您將rowItemList添加到數組列表時,您只需將參考放置在那裏。因此,稍後清除它時,剛剛添加到arraylist中的鏈表也會被清除。當您將其添加到外部列表中時,您需要克隆rowItemList。

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) { 
for(int i = 0; i < matrixArrayList.size(); i ++){ 
    for (int j = 0; j < matrixArrayList.get(0).size(); j ++) { 
     this.rowItemList.add(matrixArrayList.get(0).get(j)); 
    } 
    this.matrixArrayList.add(this.rowItemList.clone()); 
    this.rowItemList.clear(); 
} 
} 
+0

感謝您的評論Masood_mj。你說得很好。但是,好像clone()不是可以直接使用的方法。我會嘗試在我的DoubleLinkedList類中添加一個覆蓋方法,看看這是否能解決問題。 – Hank 2012-08-07 03:54:59

+0

這就對了,我忘記了你自己實現了DoubleLinkedList類。你可能想看看LinkedList克隆實現來獲得一些想法 – 2012-08-07 04:50:00

+0

@HangYu:你使用'rowItemList'的方式沒有意義。爲什麼要在其中一個函數的每個循環結束時清除一個列表實例變量?也許你想要在循環內部定義一個局部變量。 – newacct 2012-08-07 19:47:54

0

您不要在任何地方使用i

我懷疑你想:

for (int j = 0; j < matrixArrayList.get(i).size(); j ++) { 
     this.rowItemList.add(matrixArrayList.get(i).get(j)); 
    } 
+0

感謝您的意見約翰。你有一個好點,我更新了代碼。但是,沒有骰子。我會相應地更新帖子。 – Hank 2012-08-07 03:33:54

0

一個ArrayList或者LinkedList的只是其他鏈表

數組所以我假設

public ArrayList<ArrayList> methodTest(ArrayList<ArrayList> doubleList) {} 

會工作

+0

你是對的Dmor574。在我看來,困難在於你不能使用:「this.matrixArrayList = matrixArrayList;」在set方法中。 由於缺乏知識,我認爲集合對象的行爲與簡單對象的行爲不同。 – Hank 2012-08-07 03:40:38

+0

傳遞它們的問題在於它是通過引用傳遞的。這就是爲什麼我幾乎總是創建包含數組列表的類變量的原因。如果我是你,我會創建一個單獨的班級,管理雙重陣列列表 – DMor 2012-08-07 03:48:45