是否有java实用程序可以执行clone()
方法HashMap
这样它就可以复制地图元素而不仅仅是地图对象(如HashMap
类中的clone()
)?java中的HashMap的克隆实用程序
6
A
回答
11
那些元素中引用的其他对象呢?你想要多少克隆?
如果您的地图元素没有任何深刻的引用和/或一切Serializable
,您可以通过ObjectOutputStream
地图序列化为ByteArrayOutputStream
,然后反序列化的时候了。
唯一的另一种选择是手动进行。
1
一旦你知道你的键/值对要素是可复制的:
HashMap<Foo, Bar> map1 = populateHashmap();
HashMap<Foo, Bar> map2 = new HashMap<Foo, Bar>();
Set<Entry<Foo, Bar>> set1 = map1.entrySet();
for (Entry<Foo, Bar> e : l)
map2.put(e.getKey().clone(), e.getValue().clone());
+2
@Oso:如果e.getKey()或e.getValue()是另一个HashMap()或其他需要深拷贝克隆的对象,会发生什么? – 2009-06-15 21:18:24
0
在http://www.devdaily.com/java/jwarehouse/netbeans-src/db/libsrc/org/netbeans/lib/ddl/impl/SpecificationFactory.java.shtml看看在deepClone方法。它不是通用的,但它包括几个内置类型(包括HashMap本身,递归),并且可以明显扩展。
1
SO问题深度克隆实用程序建议与此类似,具有an answer that may be helpful to you。
总而言之,他们推荐使用谷歌代码中的the Cloning library。从个人经验来看,它深度复制HashMap
s。它甚至可以克隆不是Cloneable
的东西。
0
经常复制应该很深。下面是一个例子如何“深拷贝”
Map<Integer, ArrayList<Integer>>
代码:
public static Map<Integer, ArrayList<Integer>> deepCopyMapIntList
(Map<Integer, ArrayList<Integer>> original) {
Map<Integer, ArrayList<Integer>> copy = new HashMap<>(original.size());
for (int i : original.keySet()) {
ArrayList<Integer> list = original.get(i);
copy.put(i, (ArrayList<Integer>) list.clone());
}
return copy;
}
相关问题
- 1. 如何使用一组类克隆的HashMap中的Java
- 2. java中的克隆()
- 3. 克隆Android应用程序
- 4. 克隆Java中的类
- 5. 实现可克隆在Java中
- 6. 克隆Java NamingEnumeration?
- 7. 无法在Eclipse中启动java应用程序后,mercurial克隆
- 8. Java克隆的优点
- 9. Java实现克隆,泛型类。
- 10. 在Java中克隆列表
- 11. 实时克隆MovieClip
- 12. 克隆Phonecall实体
- 13. 替代Java克隆
- 14. 克隆Java对象
- 15. java克隆错误
- 16. 无法克隆openshift应用程序
- 17. 什么是克隆的实际用法
- 18. 克隆对象克隆与实现可复制的接口
- 19. 使用GSON的Java克隆对象
- 20. Java中的克隆迭代器
- 21. Java中的克隆列表元素
- 22. 克隆Java中的不可变对象
- 23. 如何在java中进行浅层克隆和深度克隆?
- 24. 如何在C#驱动程序中用BsonSerializer克隆/复制MongoDB的POCO实体
- 25. Java中的深度克隆 - 仅克隆正在构建的对象
- 26. 如何从Java的ResultSet中复制/克隆单个行?多线程实现
- 27. 无法克隆使用mysqlserverclone实用程序存在的mysql服务器
- 28. Git远程克隆
- 29. 无法克隆远程虚拟机上的克隆
- 30. 控制器中非克隆方法排序的最佳实践
旁注:如果你的元素是整个对象图不可改变的 - 你不需要克隆它们。 – Fortyrunner 2009-06-15 21:52:09