gpt4 book ai didi

java - 复制两个 vector java

转载 作者:行者123 更新时间:2023-11-29 05:52:32 25 4
gpt4 key购买 nike

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

  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() 方法将一个 vector 的内容复制到另一个 vector 。in vector 实际上是另一个类,它有自己的方法和变量。

 public class a
{

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

}

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

代码的问题是我在 Collections.copy(variables,l) 处收到一条错误消息,提示“类型不匹配:无法从对象转换为 vector ”。如果我注释掉 Collections.copy() 并在下一行中尝试使用 clone() 语句,我会遇到同样的错误。

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

我做错了什么?

最佳答案

首先你需要注意以下几点

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

Collections.copy()为您提供 Collection 的浅拷贝。使用以下示例制作您的 Collection 的深拷贝。

  • 这里被复制的类应该实现Cloneable接口(interface)并覆盖 clone方法
  • 遍历原始集合并将克隆的对象添加到目标集合
  • createCopy函数返回深度复制的集合
  • 注意控制台打印语句中复制和原始 vector 的内存位置差异

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]]

关于java - 复制两个 vector java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com