复制两个向量java

时间:2012-11-15 06:41:28

标签: java vector copy

我试图编译以下代码行并出错:

  public class c
  {
   vector<a> variables;
   void create_c(Vector<a> l)
   {    
     Vector<a> variables = new Vector<a>();
     variables.setSize(l.size()); // so that variables has enough capacity to store l
     /*variables= l.clone();*/
     Collections.copy(variables, l);
    }

   }

我正在尝试使用clone()方法或Collections.copy()方法将一个向量的内容复制到另一个向量。 in vector实际上是另一个拥有自己的方法和变量的类。

 public class a
 {

 int a;
 void add_a(int y)
 {
 a=y;
 }

 }

虽然大多数人都建议使用Arraylist(),但我也想使用Vector实现它并检查性能。所以,如果有人能给我一个涉及矢量的解决方案,我会很高兴。

代码的问题是我在Collections.copy(变量,l)上收到错误,说“类型不匹配:无法从Object转换为Vector”。如果我注释掉Collections.copy()并在下一行中使用clone()语句尝试它,我会得到同样的错误。

我还必须提到,我是一个公共类,它在同一个包中有自己的文件。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

首先,您需要注意以下事项

  • 可以通过转换为Vector来解决variables= l.clone()的编译错误。像这样variables = (Vector<a>)l.clone()(顺便说一句,忽略类型转换警告)
  • 给定代码Collections.copy(variables, l);编译得很好,没有任何错误
  • 尝试始终使用Java Naming Conventions

Collections.copy()为您提供了浅色的收藏副本。使用以下示例制作集合的深层副本。

  • 此处正在复制的类应实现Cloneable接口并覆盖clone方法
  • 迭代原始集合并将克隆的对象添加到目标集合
  • createCopy函数返回深度复制的集合
  • 注意控制台
  • 中打印语句中复制和原始矢量的内存位置的差异

TestCopy

package com.test;

import java.util.Vector;

public class TestCopy {

    private Vector<ClassToCopy> createCopy(Vector<ClassToCopy> classToCopy) {
        Vector<ClassToCopy> localVariable = new Vector<ClassToCopy>();
        for(ClassToCopy classVar:classToCopy)
            try {
                localVariable.add((ClassToCopy)classVar.clone());
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
        return localVariable;
    }

    public static void main(String[] args) {

        Vector<ClassToCopy> originalVector = new Vector<ClassToCopy>();

        TestCopy testCopy = new TestCopy();
        originalVector.add(new ClassToCopy(1));
        originalVector.add(new ClassToCopy(2));
        originalVector.add(new ClassToCopy(3));
        originalVector.add(new ClassToCopy(4));
        System.out.println(originalVector);

        Vector<ClassToCopy> copiedVector = testCopy.createCopy(originalVector);
        System.out.println(copiedVector);

    }

}

ClassToCopy

package com.test;

public class ClassToCopy implements Cloneable {

    private int varA;

    /**
     * Constructor for ClassToCopy.
     * @param varA <tt></tt>
     */
    public ClassToCopy() {
        this(-1);
    }

    /**
     * Constructor for ClassToCopy.
     * @param varA <tt></tt>
     */
    public ClassToCopy(int varA) {
        super();
        this.varA = varA;
    }

    /**
     * Gets the varA.
     * 
     * @return <tt> the varA.</tt>
     */
    public int getVarA() {
        return varA;
    }

    /**
     * Sets the varA.
     *
     * @param varA <tt> the varA to set.</tt>
     */
    public void setVarA(int varA) {
        this.varA = varA;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "ClassToCopy : "+super.toString()+" [varA=" + varA + "]";
    }

    /* (non-Javadoc)
     * @see java.lang.Object#clone()
     */
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }

}

我得到的输出

[ClassToCopy : com.test.ClassToCopy@19821f [varA=1], ClassToCopy : com.test.ClassToCopy@addbf1 [varA=2], ClassToCopy : com.test.ClassToCopy@42e816 [varA=3], ClassToCopy : com.test.ClassToCopy@9304b1 [varA=4]]
[ClassToCopy : com.test.ClassToCopy@190d11 [varA=1], ClassToCopy : com.test.ClassToCopy@a90653 [varA=2], ClassToCopy : com.test.ClassToCopy@de6ced [varA=3], ClassToCopy : com.test.ClassToCopy@c17164 [varA=4]]

答案 1 :(得分:1)

Hi Floose尝试以下方法。它正在发挥作用。

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

public class VectorCopyTest {

Vector<String> variables;

   void create_c(Vector l)
   {    
     Vector<String> variables = new Vector<String>();
     variables.setSize(l.size()); // so that variables has enough capacity to store l
     /*variables= l.clone();*/
     Collections.copy(variables, l);
     System.out.println(variables.size());
    }

   public static void main(String a[]){
       Vector<String> variables1 = new Vector<String>();
       variables1.addElement("hi");
       variables1.addElement("hello");
       VectorCopyTest copyTest = new VectorCopyTest();
       copyTest.create_c(variables1);
   }

}

答案 2 :(得分:0)

Vector newVector = (Vector) oldVector.clone();

以上代码仅适用于深度复制矢量。