Question

I got a problem when I tried to add 1D vector to 2D vector.

I wrote specific codes as following

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

At the last line, I expected that "[[a,a,a], [b,b,b]]" but the result was "[[b,b,b], [b,b,b]]"

What is wrong ?

Thanks in advance.

Était-ce utile?

La solution

When you're adding the singleVector object to multiVector, you're not making a copy of it. So when you clear the singleVector and change it to "b,b,b" you're also "changing" the (same) object that you added to multiVector.

If you want to change singleVector without modifying multiVector you should singleVector = new Vector<>() instead of clear()'ing it.

Autres conseils

You have used the same Vector, already added to multiVector, and redefined its value. If you like to add a new one you have to write:

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

You are adding the object itself, not the value, so when you change the value of singleVector o you clear it, you are doing it on the multivector added one!

You must do as it follows:

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]]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top