Java将1D向量添加到2D向量

时间:2014-04-29 13:39:43

标签: java vector type-2-dimension

当我尝试将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] ]]“

有什么问题?

提前致谢。

3 个答案:

答案 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]]