如何在不更新原始向量的情况下将一个向量复制到Java中的另一个向量?

时间:2014-10-25 14:39:57

标签: java vector copy

我正在将一个矢量复制到另一个相同类型的矢量。修改复制矢量但原始矢量也在更新我不明白为什么?

Vector<allocated>finished_copy=new Vector<allocated>();
finished_copy=finished;

我在修改之前和之后打印原始矢量的值

for(int k=0;k<finished.size();k++) {
        System.out.print(finished.elementAt(k).output);
        System.out.print(finished.elementAt(k).step);
        System.out.println();
}//some modification on finished_copy

打印原件但两者都不同

请帮助我

2 个答案:

答案 0 :(得分:2)

你没有做任何副本。您所做的只是将相同的Vector分配给另一个变量:

在:

finished ------> [a, b, c, d]

后:

finished ------> [a, b, c, d]
                 ^
                 |
finished_copy ---/

以下是如何将Vector的所有元素复制到另一个元素中:

Vector<Allocated> finishedCopy = new Vector<>(finished);

Vector<Allocated> finishedCopy = new Vector<>();
finishedCopy.addAll(finished);

然而,这将创建两个不同的向量,其中包含对相同的Allocated实例的引用。如果您想要的是这些对象的副本,则需要创建显式副本。在不进行复制的情况下,更改第一个列表中对象的状态也将在第二个列表中更改其状态,因为两个列表都包含对相同对象的引用。

请注意:

  • 类应以大写字母开头
  • 变量不应包含欠记录,但应该是camelCased
  • 不应再使用Vector了。从Java 2开始,ArrayList应该是。我们在Java 8。

答案 1 :(得分:0)

当您为finished_copy分配引用时,您new Vector()无法访问。这个,

Vector<allocated>finished_copy=new Vector<allocated>();
finished_copy=finished;

应该是(使用this Vector constructor

Vector<allocated>finished_copy=new Vector<>(finished);

请注意,这仍然是finished

内容的浅表副本