1

我正在使用其 add(Object) 方法将对象添加到 java Vector 中。在我的示例中,前 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]

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

4

2 回答 2

10

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

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

于 2008-11-07T05:16:36.290 回答
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!

于 2008-11-07T06:09:18.463 回答