我使用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)。同样的事情发生了。
答案 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!