我试图编译以下代码行并出错:
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()语句尝试它,我会得到同样的错误。
我还必须提到,我是一个公共类,它在同一个包中有自己的文件。
我做错了什么?
答案 0 :(得分:2)
首先,您需要注意以下事项
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();
以上代码仅适用于深度复制矢量。