Java добавить 1D вектор в 2D вектор

1

У меня возникла проблема, когда я попытался добавить вектор 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]]"

Что не так?

Заранее спасибо.

  • 1
    Имейте в виду, что вы не должны использовать класс Vector вообще. Это унаследованный класс.
Теги:
vector

3 ответа

4
Лучший ответ

Когда вы добавляете объект singleVector в multiVector, вы не копируете его. Поэтому, когда вы очищаете singleVector и меняете его на "b, b, b", вы также "меняете" (тот же) объект, который вы добавили в multiVector.

Если вы хотите изменить singleVector без изменения multiVector вы должны использовать singleVector = new Vector<>() вместо clear().

  • 1
    +1 Это было супер быстро!
1

Вы использовали тот же Вектор, который уже добавлен в multiVector, и переопределил его значение. Если вы хотите добавить новый, вы должны написать:

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

Вы добавляете сам объект, а не значение, поэтому, когда вы меняете значение singleVector o, вы его очищаете, вы делаете это на добавленном 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]]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню