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();
}
}
任何原因这都行不通?建议,评论?
答案 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) {}
会起作用