Я добавляю объекты в вектор 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). Произошло то же самое.




Я подозреваю, что каким-то образом «объекты», которые вы получаете от итератора, на самом деле являются множественными ссылками на один экземпляр изменяемого объекта, который меняет свое состояние с «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!
если values - это итератор, было бы полезно знать, что он повторяет.