这看起来非常简单,但是我无法将2D String ArrayList复制到一个全新的2D String ArrayList数据结构中。
public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) {
ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>();
for(int i = 0; i < input.size(); i++) {
ArrayList<String> line = input.get(i); // Issue here?
for(int j = 0; j < input.get(i).size(); j++) {
line.set(j, input.get(i).get(j));
}
}
return copy;
}
我不打算做一个浅拷贝,我试图迭代整个ArrayList并将其复制到一个新的。我觉得我没有使用我的行ArrayList正确初始化行,但我认为ArrayList数据结构的重点是可以在不初始化大小的情况下添加数据吗?
第一行似乎被正确复制,但是当我尝试添加后续行时,我正在索引越界。
答案 0 :(得分:3)
您忘记在ArrayList
内部创建ArrayList
。
public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) {
ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>();
for(int i = 0; i < input.size(); i++) {
ArrayList<String> line = new ArrayList<String>();
for(int j = 0; j < input.get(i).size(); j++) {
line.add(input.get(i).get(j));
}
copy.add(line);
}
return copy;
}
答案 1 :(得分:2)
public static ArrayList<ArrayList<String>> copy(ArrayList<ArrayList<String>> input) {
ArrayList<ArrayList<String>> copy = new ArrayList<ArrayList<String>>(input.size());
for(int i = 0; i < input.size(); i++) {
ArrayList<String> line = input.get(i);
copy.set(i, new ArrayList<String>(line.size())); // add internal array initialization
for(int j = 0; j < line.size(); j++) {
copy.get(i).set(j, line.get(j)); // actually copy value into new array
}
}
return copy;
}