1

大师,我很难将双向链表的数组列表作为参数传递。

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

ArrayList<DoubleLinkedList<Integer>> dLLArrayList

读入第一个输入后,dllArryList 有内容"[[5]]"

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

Matrix mx1 = new Matrix (dimension, dLLArrayList);

** 维度只是一个 int 变量,用于存储矩阵的大小,例如 1 表示 1 x 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();
    }
}

有什么理由这行不通吗?建议、意见?

4

3 回答 3

2

The problem is that you clear the rowItemList. When you add the rowItemList to the arraylist you just put the reference there. So when you clear it later the linkedlist just added inside the arraylist is also cleared. You need to clone the rowItemList when you add it in the outer list.

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();
}
}
于 2012-08-07T03:36:45.223 回答
0

你不使用i任何地方。

我怀疑你想要:

for (int j = 0; j < matrixArrayList.get(i).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(i).get(j));
    }
于 2012-08-07T03:17:55.393 回答
0

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

所以我假设

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

会工作

于 2012-08-07T03:18:11.647 回答