相关疑难解决方法(0)

如何克隆ArrayList并克隆其内容?

如何克隆ArrayList并在Java中克隆其项目?

例如,我有:

ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
Run Code Online (Sandbox Code Playgroud)

我希望那些物品clonedList与狗列表中的物品不同.

java collections clone deep-copy

258
推荐指数
8
解决办法
41万
查看次数

Java:深度克隆/复制实例的推荐解决方案

我想知道是否有推荐的方法在java中进行深度克隆/复制实例.

我有三个解决方案,但我可以错过一些,我想得到你的意见

编辑:包括Bohzo的提议和改进问题:它更多的是深度克隆而不是浅层克隆.

自己做:

在属性之后通过hand属性编写克隆代码并检查是否也克隆了可变实例.
亲:
- 控制将要执行的操作
- 快速执行
缺点:
- 编写和维护繁琐
- 容易出错(复制/粘贴失败,缺少属性,重新分配的可变属性)

使用反射:

使用您自己的反射工具或外部帮助程序(如jakarta common-beans),可以轻松编写一个通用的复制方法,该方法可以在一行中完成工作.
亲:
- 易于编写
- 没有维护
缺点:
- 对发生的事情的控制较少
- 如果反射工具也没有克隆子对象,则容易出现可变对象的错误
- 执行速度较慢

使用克隆框架:

使用为您执行此操作的框架,例如:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo

亲:
- 与反思一样
- 更多地控制将要克隆的内容.
缺点:
- 即使在层次结束时,每个可变实例都被完全克隆
- 执行起来可能非常慢

使用字节码检测在运行时编写克隆

javassit,BCELcglib可能用于生成专用克隆器,只需单手写入.为此目的,有人知道使用这些工具之一的lib吗?

我错过了什么?
你会推荐哪一个?

谢谢.

java clone

173
推荐指数
4
解决办法
13万
查看次数

如何将一个ArrayList的内容复制到另一个?

我有一些数据结构,我想使用一个作为临时,另一个不是临时的.

ArrayList<Object> myObject = new ArrayList<Object>();
ArrayList<Object> myTempObject = new ArrayList<Object>();


//fill myTempObject here
....

//make myObject contain the same values as myTempObject
myObject = myTempObject;

//free up memory by clearing myTempObject
myTempObject.clear();
Run Code Online (Sandbox Code Playgroud)

现在这个问题当然是myObject真的只是指向myTempObject,所以一旦myTempObject被清除,也是如此myObject.

如何从保留值myTempObjectmyObject使用Java?

java reference variable-assignment

77
推荐指数
5
解决办法
23万
查看次数

Deep clone实用程序推荐

是否有任何用于深度克隆java集合的实用程序:

  • 数组
  • 清单
  • 地图

注意:在不使用序列化的情况下更喜欢某些解决方案,但使用Object.clone()方法.我可以肯定我的自定义对象将实现clone()方法,并将只使用可克隆的java标准类...

java clone

72
推荐指数
6
解决办法
8万
查看次数

如何按值复制对象,而不是按引用复制

我想制作一个对象的副本,然后在一些逻辑之后,重新分配原始对象的副本值.

例:

User userCopy = //make a copy

foreach(...)
{
  user.Age = 1;
  user.ID = -1;

  UserDao.Update(user)


  user = userCopy; 

}
Run Code Online (Sandbox Code Playgroud)

我不希望通过引用复制它,它必须是按值复制.

以上只是一个示例,而不是我真正想要如何使用它,但我需要学习如何按值复制.

java

34
推荐指数
3
解决办法
11万
查看次数

为什么java中不允许赋值为'this'?

我从编译器得到的错误是"赋值的左侧必须是变量".我的用例是深度复制,但并不真正相关.

在C++中,可以分配给*this.

问题不在于如何规避任务this.这很简单,但是决定不做this变量的背后有什么理由.

原因是技术性的还是概念性的?

我的猜测到目前为止 - 在随机方法中重建Object的可能性容易出错(概念性),但技术上可行.

编辑请限制"因为Java规范如此说"的变化.我想知道决定原因

java reference this variable-assignment

20
推荐指数
3
解决办法
9805
查看次数

Java中集合的深度克隆

最近我在采访中遇到了这个问题:

编写一个函数来返回类Drawing的深度克隆实例

public class Drawing{

  public List<Shape> shapes=new LinkedList<Shape>();

}
Run Code Online (Sandbox Code Playgroud)

其中shape是一个具有许多具体实现的抽象类

public abstract class Shape implements Serializable{

}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我们如何解决这个问题吗?我们是否需要在所有具体实现中添加克隆方法?

java cloning

11
推荐指数
1
解决办法
658
查看次数

将对象复制到另一个

有没有通用的方法来实现将现有对象复制到另一个对象?

假设MyObj有一个idname字段.像这样:

MyObj myObj_1 = new MyObj(1, "Name 1");
MyObj myObj_2 = new MyObj(2, "Name 2");
Run Code Online (Sandbox Code Playgroud)

代替

myObj_2.setName(myObj_1.getName()) // etc for each field
Run Code Online (Sandbox Code Playgroud)

做一些如下事情:

myObj_2.copyFrom(myObj_1)
Run Code Online (Sandbox Code Playgroud)

这样它们就是不同的实例,但具有相同的属性.

java

6
推荐指数
3
解决办法
2万
查看次数

Java中泛型类型的深层副本

泛型类型的深层副本(克隆)如何T, E在Java中工作?可能吗?

E oldItem;
E newItem = olditem.clone(); // does not work
Run Code Online (Sandbox Code Playgroud)

java generics clone generic-programming

6
推荐指数
1
解决办法
6346
查看次数

反序列化对象是否保留静态值?

这是一个非常基本的测试程序:

public class Body implements Serializable {
    static int bod = 5;
    int dis = -1;
    public void show(){
        System.out.println("Result: " + bod + " & "  + dis);
    }
}

public class Testing {
    public static void main(String[] args) {
        Body theBody = new Body();
        theBody.show();
        try {
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.dat"));
            out.writeObject(theBody);
            out.close();
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.dat"));
            Body bodyDouble = (Body)in.readObject();
            in.close();
            bodyDouble.show();
        } catch(IOException e) { 
        } catch(ClassNotFoundException e) {
        }

    }
} …
Run Code Online (Sandbox Code Playgroud)

java serialization

6
推荐指数
1
解决办法
80
查看次数