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()
(顺便说一句,忽略typecast警告)variables=(Vector)l.clone()
- 给定的代码
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();