-2

ベクトルを別のベクトルにコピーしたいのですが。問題は、ベクトルを変更するv1と、2番目のベクトルv2も変更されることです。私の目標は、ソースベクトルを変更してもコピーをそのまま維持することです。

import java.util.Collections;
import java.util.Vector;

public class CopyElementsOfVectorToVectorExample {

  public static void main(String[] args) {

    //create first Vector object
    Vector v1 = new Vector();

    //Add elements to Vector
    v1.add("1");
    v1.add("2");
    v1.add("3");

    //create another Vector object
    Vector v2 = new Vector(v1.size());  

    v2.setSize(v1.size());
    Collections.copy(v2,v1);


    System.out.println("After copy, Second Vector Contains : " + v2);  
  }}

2番目のコピーをそのまま保持するにはどうすればよいですか?

4

4 に答える 4

14

上記のコードは複雑すぎますが、問題ありません。それはに減らすことができます

Vector copy = new Vector(original);

また、Vectorを避け、代わりにArrayListを使用する必要があります。

于 2012-07-10T13:13:44.837 に答える
7

[...]ベクトルv1を変更し、2番目のv2も変更しています...私の目標は、ソースベクトルを変更してもコピーをそのまま維持することです。

ベクトルには、オブジェクトへの参照が含まれています。オブジェクトを変更すると、変更は両方のベクトルから表示されます。

あなたが求めているのは深いコピーだと思います。

于 2012-07-10T13:12:19.407 に答える
3

以下のコードを使用して、ベクターを複製できます。

Vector v1 = new Vector();

//Add elements to Vector
v1.add("1");
v1.add("2");
v1.add("3");

//create another Vector object
Vector v2 = (Vector)v1.clone();  
于 2014-02-07T11:46:11.143 に答える
1

the problem is if I change the vector v1, the second v2 is changing too ...My goal is to keep the copy intact even if I change the source vector

これは、ディープ コピーではなくサロウ コピーCollections.copy(v2,v1)を作成するためです。

のディープコピーを作成しますVector

以前の回答をお詫びします。

編集:

vectorタイプ のオブジェクトが含まれていると想定していますSerializable。このアプローチにより、コレクションのディープ コピーを取得できます。

static public Object deepCopy(Object oldObj) throws Exception {
    ObjectOutputStream oos = null;
    ObjectInputStream ois = null;
    try {
        ByteArrayOutputStream bos = new ByteArrayOutputStream(); // A
        oos = new ObjectOutputStream(bos); // B
        // serialize and pass the object
        oos.writeObject(oldObj); // C
        oos.flush(); // D
        ByteArrayInputStream bin = new ByteArrayInputStream(
                bos.toByteArray()); // E
        ois = new ObjectInputStream(bin); // F
        // return the new object
        return ois.readObject(); // G
    } catch (Exception e) {
        System.out.println("Exception in ObjectCloner = " + e);
        throw (e);
    } finally {
        oos.close();
        ois.close();
    }
}
于 2012-07-10T13:16:42.580 に答える