2008-11-07 68 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!

相关问题