Вопрос

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.

Это было полезно?

Решение

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.

Другие советы

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]]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top