Java 为什么我的add方法会覆盖向量?

Java 为什么我的add方法会覆盖向量?,java,vector,Java,Vector,我使用其add(Object)方法将对象添加到java向量中。 在我的示例中,前5个对象是相同的,后面是与前5个不同的2个实例。 出于某些原因,只要我插入第一个不同的向量,它就会将整个向量更改为该值 “values”是一个迭代器,包含以下内容 ‘1’、‘1’、‘1’、‘1’、‘1’、‘2’、‘2’ Vector temp = new Vector(); while (values.hasNext()) { temp.add(values.next()); Syste

我使用其add(Object)方法将对象添加到java向量中。 在我的示例中,前5个对象是相同的,后面是与前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,2]


我尝试使用LinkedList和add(object,index)。同样的事情也发生了。

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


你能发布更完整的代码吗?显示
值的来源和初始化方式。

我怀疑,不知何故,您从迭代器中获得的“对象”实际上是对可变对象的单个实例的多个引用,该实例正在将其状态从“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]

因此,您可能希望提供完整的实现,尤其是迭代器。我不得不说,但你们真的不应该使用向量

以下程序在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]

因此,您可能希望提供完整的实现,尤其是迭代器。我不得不说,但你们真的不应该使用向量

如果值是迭代器,那么知道它在迭代什么会很有帮助。如果值是迭代器,那么知道它在迭代什么会很有帮助。