当我尝试将1D矢量添加到2D矢量时,我遇到了问题。
我写了以下具体代码
Vector<Vector<String>> multiVector = new Vector<Vector<String>>();
Vector<String> singleVector = new Vector<String>();
singleVector.add("a,a,a");
System.out.println(singleVector); // [a,a,a]
multiVector.add(singleVector);
System.out.println(multiVector); // [[a,a,a]]
singleVector.clear();
singleVector.add("b,b,b");
System.out.println(singleVector); // [b,b,b]
multiVector.add(singleVector);
System.out.println(multiVector); // [[b,b,b], [b,b,b]]
在最后一行,我预期“[[a,a,a],[b,b,b]]”但结果是“[[b,b,b],[b,b,b] ]]“
有什么问题?
提前致谢。
答案 0 :(得分:4)
当您将singleVector
对象添加到multiVector
时,您不制作副本。因此,当您清除singleVector
并将其更改为“b,b,b”时,您还“更改”了添加到multiVector
的(相同)对象。
如果您想在不修改singleVector
的情况下更改multiVector
,则应singleVector = new Vector<>()
而不是clear()
。
答案 1 :(得分:1)
您已使用已添加到multiVector的相同Vector,并重新定义了其值。如果你想添加一个新的,你必须写:
Vector<Vector<String>> multiVector = new Vector<Vector<String>>();
Vector<String> singleVector = new Vector<String>();
singleVector.add("a,a,a");
System.out.println(singleVector); // [a,a,a]
multiVector.add(singleVector);
System.out.println(multiVector); // [[a,a,a]]
singleVector = new Vector<String>();
singleVector.add("b,b,b");
System.out.println(singleVector); // [b,b,b]
multiVector.add(singleVector);
System.out.println(multiVector); // [[a,a,a], [b,b,b]]
答案 2 :(得分:1)
您正在添加对象本身,而不是值,因此当您更改singleVector
的值时,如果您清除它,则会在multivector
添加的内容中进行此操作!
你必须按照以下方式行事:
Vector<Vector<String>> multiVector = new Vector<Vector<String>>();
Vector<String> singleVector1 = new Vector<String>();
Vector<String> singleVector2 = new Vector<String>();
singleVector1.add("a,a,a");
System.out.println(singleVector1); // [a,a,a]
multiVector.add(singleVector1);
System.out.println(multiVector); // [[a,a,a]]
singleVector2.add("b,b,b");
System.out.println(singleVector2); // [b,b,b]
multiVector.add(singleVector2);
System.out.println(multiVector); // [[a,a,a], [b,b,b]]