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

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

Vectorfinished_copy=new Vector(); 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 

并且打印原件但两者都不同

请帮帮我

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

之前:

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

后:

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

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

 Vector finishedCopy = new Vector<>(finished); 

要么

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

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

注意:

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

将引用分配给finished_copy ,将使new Vector()无法访问。 这个,

 Vectorfinished_copy=new Vector(); finished_copy=finished; 

应该是这样的(使用这个Vector构造函数 )

 Vectorfinished_copy=new Vector<>(finished); 

注意,这仍然是finished内容的浅层副本。