我有一个我想要克隆的ArrayList,因此我做了以下内容:
import java.util.ArrayList;
import java.util.Arrays;
public class Test {
public static ArrayList<ArrayList<Integer>> answer = new ArrayList<ArrayList<Integer>>();
public static ArrayList<ArrayList<Integer>> copans = new ArrayList<ArrayList<Integer>>();
public static void main(String[] args) {
ArrayList<Integer> yolo = new ArrayList<Integer>();
yolo.add(9);
yolo.add(0);
yolo.add(1);
answer.add(yolo);
appendRow();
}
static void appendRow() {
copans.addAll(answer);
copans.get(0).remove(0);
copans.get(0).remove(0);
System.out.println("ans "+answer);
}
}
appendRow()会导致copans从之前[9,0,1]变为[1]。但是,我没想到答案会变成[1]而不是[9,0,1],这根本没有意义。
我想知道我是否没有以正确的方式复制值?谢谢你的帮助!
答案 0 :(得分:5)
你可能意味着:
public static ArrayList<Integer> answer = new ArrayList<Integer>();
public static ArrayList<Integer> copans = new ArrayList<Integer>();
public static void main(String[] args) {
answer.add(9);
answer.add(0);
answer.add(1);
appendRow();
}
static void appendRow() {
copans.addAll(answer);
copans.remove(0);
copans.remove(0);
System.out.println("answer: "+answer);
System.out.println("copans: "+copans);
}
<强>输出:强>
answer: [9, 0, 1]
copans: [1]
副本&amp;元素的删除工作正常。
在您更新问题之后,由于yolo
方法中arrayList
main
仅可访问,您的代码将无法编译。