2008-11-07 5 views
1

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

'ценности' итератор, содержащий что-то вроде '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, а также с помощью добавления (объект, индекс). То же самое произошло.

+0

Что такое «значения»? – 2008-11-07 05:07:25

ответ

10

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

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

2

Следующая программа компилируется и побежал под 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] 

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

Смежные вопросы