java克隆深拷贝HashMap

标签 java hashmap clone

在我的 web 应用程序中,我必须将相同的数据从 DB 导入到 web 应用程序中,这需要花费很多时间。 我所做的是,我获取数据并将其放入 HashMap 中。这样我就不必每次都将它带入网络应用程序。但最大的问题是,所有用户都将对他们更改的相同数据进行操作。 我的第一个问题是:把DB带来的数据保存在HashMap中,这样就不用每次都去DB查询了,这样对吗? 我的第二个问题是,如果我可以使用 HashMap 来保存数据,我必须对引入并放入 HashMap 中的数据进行深度复制或克隆,这样每个用户都有一份原始数据的副本。对吧?

我要克隆的对象是一个传输对象,它引用了其他对象和 HashMap。 过程是这样的:首先从数据库中获取数据,创建类并将所有类放入一个传输对象中,然后将该传输对象放入一个 HashMap 中。下次把hashmap的数据带过来。

感谢您的帮助。 编辑:来自数据库的数据创建了一个在线表格,并具有默认值,如姓名、地址和性别……所有用户都必须根据自己的目的编辑表格。这样每个用户都必须有自己的副本才能对其进行操作。

最佳答案

深度克隆的一种非常简单的方法是序列化/反序列化对象。只有当你的 hashmap 中的所有键/值都实现 java.io.Serializable 时,这才会起作用。

例如:

public <T extends Serializable> T deepClone(T o) {
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(byteOut);
    out.writeObject(o);
    out.flush();
    ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray());
    return o.getClass().cast(in.readObject());
}

关于java克隆深拷贝HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752771/

相关文章:

java - 使用并发 HashMap 来减少线程池的内存使用量?

java - 对 Java 中的克隆感到困惑

使用 GIT_SSH 错误使用自定义 SSH 进行 Git 克隆

javascript - JQuery 处理克隆对象

java - 从 Java 6 SE 迁移到 Java 6 EE

java - 如果条件为真,有什么方法可以中断并重新启动 for 循环吗?

java - Android 对象到 hashmap(在 ListView 上)

java - 以编程方式取消部署 war 文件 (Wildfly 18.x)

java - UML 图帮助(聚合/组合)

java - hashcode() 和 equals() 在 java 中的工作?