为什么我的add方法会覆盖Vector?

时间:2008-11-07 04:57:47

标签: java vector

我使用add(Object)方法将对象添加到java Vector中。 在我的示例中,前5个对象是相同的,后跟2个不同于前5个的实例。 出于某些原因,只要我插入不同的第一个,它就会将整个向量更改为该值!

'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)。同样的事情发生了。

2 个答案:

答案 0 :(得分:10)

我怀疑,不知何故,你从迭代器获得的“对象”实际上是对可变对象的单个实例的多个引用,它将其状态从“1”更改为“2”。我无法猜测的是它在这种明显的单线程操作中如何改变状态。

你能发布更完整的代码吗?显示values来自哪里以及如何初始化。

答案 1 :(得分: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]

因此,您可能希望提供完整的实现,尤其是Iterator。而我只需说出来,但你真的不应该使用Vector!