Почему мой метод добавления перезаписывает вектор?

Я добавляю объекты в вектор java, используя его метод add (Object). В моем примере первые 5 объектов идентичны, за ними следуют 2 экземпляра, отличные от первых пяти. По некоторым причинам, как только я вставляю первый другой, он меняет весь вектор на это значение!

'values' - это итератор, содержащий что-то вроде «1», «1», «1», «1», «1», «2», «2»


Vector temp = new Vector();    
while (values.hasNext()) {
     temp.add(values.next());
     System.out.println(temp.toString());
}

Будет выведено что-то вроде

[1]
[1,1]
[1,1,1]
[1,1,1,1]
[1,1,1,1,1]
[2,2,2,2,2,2]
[2,2,2,2,2,2,2]

Я пробовал использовать LinkedList, а также использовать add (object, index). Произошло то же самое.

если values ​​- это итератор, было бы полезно знать, что он повторяет.

Jim Nelson 07.11.2008 09:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 483
2

Ответы 2

Я подозреваю, что каким-то образом «объекты», которые вы получаете от итератора, на самом деле являются множественными ссылками на один экземпляр изменяемого объекта, который меняет свое состояние с «1» на «2». Я не могу догадаться, как он меняет состояние в этой явно однопоточной операции.

Можете выложить более полный код? Покажите, откуда берется values и как он инициализируется.

Следующая программа скомпилирована и работает под Mac OS X

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

 public class Test{ 

     public static void main( String ... args ){ 
         List list = Arrays.asList(new String[] {"1","1","1","1","1","2","2"});
         Iterator values = list.iterator();
         Vector temp = new Vector();    
         while (values.hasNext()) {
              temp.add(values.next());
              System.out.println(temp.toString());
         }
     } 
 } 

дали следующие результаты:

[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 2]
[1, 1, 1, 1, 1, 2, 2]

Таким образом, вы можете захотеть предоставить полную реализацию, особенно свой Iterator. И я просто должен сказать это, но вам действительно не следует использовать Vector!

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