我想得到名为point的2D arrayList的lastElement,并将最后一个元素作为具有更新Y值和相同X值的新元素添加回列表。所以基本上我正在做的是获得点2D数组的最后一个元素,在点2D数组的末尾添加它,但是将y值更改为它。但问题是,当我更改y值时,它还会更改从中获取信息的元素的值。
List<List<Integer>> point = new ArrayList<List<Integer>>();
List<Integer> values= new ArrayList<Integer>();
values.add(1);//x
values.add(2);//y
point.add(values);
point.add(point.get(point.size()-1));
point.get(0).set(1, 200);
System.out.println(point);
输出:[[1,200],[1,200]] 预期输出:[[1,2],[1,200]]
答案 0 :(得分:0)
point.add(point.get(point.size()-1));
没有做你的想法。它将reference
添加到arraylist中的倒数第二个元素到最后一个元素。因此,当您尝试显示最后一个元素的值时,它实际上从values
中的倒数第二个point
获取数据并显示该数据。要单独修改数据,请将我指出的行替换为:
point.add(new ArrayList<Integer>(values));
因此,您应该在values
的末尾单独添加两份point
。
point.get(0).set(1, 200); //0 denotes first element. not last
会给你这个输出:
[[1, 200], [1, 2]]
这应该替换为
point.get(point.size() - 1).set(1, 200); //last element
纠正这两个错误将为您提供预期的输出。
答案 1 :(得分:0)
试试这个
List<List<Integer>> point = new ArrayList<List<Integer>>();
List<Integer> values = new ArrayList<Integer>();
values.add(1);// x
values.add(2);// y
point.add(values);
List<Integer> secondList = new ArrayList<Integer>(point.get(point
.size() - 1));
secondList.set(1, 200);
point.add(secondList);
System.out.println(point);
答案 2 :(得分:0)
List<List<Integer>> point = new ArrayList<List<Integer>>();
List<Integer> values= new ArrayList<Integer>();
values.add(1);//x
values.add(2);//y
point.add(values);
List<Integer> values2= new ArrayList<Integer>();
values2.add(point.get(point.size()-1).get(0));
values2.add(point.get(point.size()-1).get(1));
point.add(values2);
point.get(1).set(1, 200);
System.out.println(point);
这样可以正常工作。 由于添加到点的新元素具有与初始元素相同的引用,因此发生了问题。因此,所做的更改将应用于这两个元素。
答案 3 :(得分:-1)
当您使用
添加第二个条目时point.add(point.get(point.size()-1));
您实际上是将引用添加到第一个数组。因此,它们将是相同的,并且也相应地改变是很自然的。
您需要创建新对象作为其唯一的副本,例如
point.add(new ArrayList<Integer>(point.get(point.size()-1)));