package testing;
import java.util.Random;
import java.util.Vector;
public class Variable2Variable {
public static void main(String[] args) {
Vector<Vector<Integer>> lines;
Vector<Integer> linePoints;
Random rndNumbers = new Random();
lines = new Vector<Vector<Integer>>();
linePoints = new Vector<Integer>();
for(int i = 0; i < 5; i++){
linePoints.add(rndNumbers.nextInt(10));
linePoints.add(rndNumbers.nextInt(10));
}
lines.add(linePoints);
//linePoints.clear();
System.out.println("Vector: lines: " + lines);
System.out.println("Vector: linePoints: " + linePoints);
}
}
请运行上面的代码,记下结果,然后取消注释“//linePoints.clear();”行然后再次运行它。
如何从vector'linePoints'移动元素并将它们存储到矢量'lines'中? 感谢。
答案 0 :(得分:3)
而不是
lines.add(linePoints);
//linePoints.clear();
System.out.println("Vector: lines: " + lines);
System.out.println("Vector: linePoints: " + linePoints);
这样做:
lines.add(linePoints);
linePoints = new Vector<Integer>();
System.out.println("Vector: lines: " + lines);
System.out.println("Vector: linePoints: " + linePoints);
还有一些注意事项:
TL; DR部分
您编写的代码说明:
lines = new Vector<Vector<Integer>>(); //create list instance holding list of Integers
linePoints = new Vector<Integer>(); //create list instance holding list of Integers
for(int i = 0; i < 5; i++){ // fill list of Integers with even number of Integers
linePoints.add(rndNumbers.nextInt(10));
linePoints.add(rndNumbers.nextInt(10));
}
lines.add(linePoints);
//add a reference pointing at the "list of Integers **instance**"
//to the list of list of Integers instance
//No copying happens here! Still only two lists, one has a reference to the other.
//to copy, you should do:
//lines.add(new Vector<Integer>(linePoints));
linePoints.clear(); //blam! this removes the integers from the list of Integers
// as linePoints has only a reference to the list instance itself,
// that has now the same empty list...
System.out.println("Vector: lines: " + lines); //empty
System.out.println("Vector: linePoints: " + linePoints); //1 element, the empty list
解释修复的工作原理:
lines = new Vector<Vector<Integer>>(); //create list instance holding list of Integers
linePoints = new Vector<Integer>(); //create list instance holding list of Integers
for(int i = 0; i < 5; i++){ // fill list of Integers with even number of Integers
linePoints.add(rndNumbers.nextInt(10));
linePoints.add(rndNumbers.nextInt(10));
}
lines.add(linePoints);
//add a reference pointing at the "list of Integers **instance**"
//to the list of list of Integers instance
linePoints = new Vector<Integer>(); //create new empty list,
//and set the reference linePoints to point to that list.
//the original instance is left alone, lines list's reference still points to it
//there are now 3 instances of List in memory now:
// * new empty Vector<Integer>, linePoints references it
// * the Vector<Vector<Integer>> instance, lines references it
// * the "old" Vector<Integer> instance, the first element of lines references it
System.out.println("Vector: lines: " + lines); //empty
System.out.println("Vector: linePoints: " + linePoints); //1 element: the list, having the integers