Java 复制两个向量

Java 复制两个向量,java,vector,copy,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 st

我试图编译以下代码行,但出现错误:

  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);
    }

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

代码的问题是,我在Collections.copy(variables,l)上遇到一个错误,说“类型不匹配:无法从对象转换为向量”。如果我注释掉Collections.copy()并在下一行中使用clone()语句进行尝试,则会得到相同的错误

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


我做错了什么

你好,请尝试以下方法。它正在工作

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);
   }
import java.util.Collections;
导入java.util.Vector;
公共类向量复制测试{
向量变量;
void create_c(向量l)
{    
向量变量=新向量();
variables.setSize(l.size());//以便变量有足够的容量存储l
/*变量=l.clone()*/
集合。复制(变量,l);
System.out.println(variables.size());
}
公共静态void main(字符串a[]{
向量变量1=新向量();
变量1.附加元素(“hi”);
变量1.addElement(“hello”);
VectorCopyTest copyTest=新VectorCopyTest();
copyTest.create_c(变量1);
}

}

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

  • variables=l.clone()
    的编译错误可以通过强制转换到向量来解决。像这样
    variables=(Vector)l.clone()
    (顺便说一句,忽略typecast警告)
  • 给定的代码
    Collections.copy(变量,l)编译得很好,没有任何错误
  • 尝试始终使用
    Java命名约定
Collections.copy()
为您提供收藏的浅拷贝。使用以下示例制作收藏的深度副本

  • 这里被复制的类应该实现
    Cloneable
    接口并重写
    clone
    方法
  • 迭代原始集合并将克隆的对象添加到目标集合
  • createCopy
    函数返回深度复制的集合
  • 注意控制台中print语句中复制向量和原始向量的内存位置不同
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 : 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]]

上面的代码只是用于深度复制向量

你需要在谷歌上搜索并学习一些Java命名约定。可能不相关,但类“c”中的“变量”声明应该有一个大写V表示向量。使用ArrayList,如果你想让它同步,可以使用Collections.synchronizedList(List)。如果可以通过循环来完成,你会同意吗?通过逐个索引复制索引或强调必须使用集合#复制函数为什么要声明两次
向量变量
两次?谢谢!但是你能告诉我我的原始代码有什么问题吗?非常感谢你的努力!!我甚至都不知道。再次感谢!
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]]
Vector newVector = (Vector) oldVector.clone();