2008-11-07 36 views
1

我使用add(Object)方法將對象添加到java Vector中。 在我的示例中,前5個對象是相同的,接着是與前5個不同的2個實例。 由於某些原因,只要插入不同的第一個,它就會將整個矢量更改爲該值!爲什麼我的add方法會覆蓋Vector?

'價值' 是含有像 '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]

我嘗試使用一個鏈表,以及使用添加(對象,指數)。同樣的事情發生。

+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!

相關問題