Java:传递双向链表的arraylist作为参数

时间:2012-08-07 03:04:05

标签: java arraylist parameter-passing doubly-linked-list

Gurus,我很难将双向链表的arraylist作为参数传递。

我需要在涉及链表的数据结构中表示方形矩阵。我决定使用双链表的arraylist。从文本文件中读取的矩阵信息存储在:

ArrayList<DoubleLinkedList<Integer>> dLLArrayList

在读取第一个输入后,dllArryList的内容为"[[5]]"

我尝试通过从自定义的Matrix类调用构造函数来创建一个新的矩阵对象:

Matrix mx1 = new Matrix (dimension, dLLArrayList);

** dimension只是一个int变量,用于存储矩阵的大小,例如1表示1×1矩阵,如输入文本文件所示。

但是,当我尝试在Matrix类中打印出矩阵内容时,它会返回"[[]]":

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

这是矩阵类中的set方法,它假设设置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();
    }
}

任何原因这都行不通?建议,评论?

3 个答案:

答案 0 :(得分:2)

问题是您清除了rowItemList。将rowItemList添加到arraylist时,只需将引用放在那里。因此,当您稍后清除它时,刚刚添加到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();
}
}

答案 1 :(得分:0)

您不能在任何地方使用i

我怀疑你想要:

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

答案 2 :(得分:0)

ArrayList或LinkedList只是其他链接列表的数组

所以我假设

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

会起作用