是否有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. java克隆深拷貝HashMap
- 2. 如何使用一組類克隆的HashMap中的Java
- 3. java中的克隆()
- 4. 克隆Android應用程序
- 5. 克隆Java中的類
- 6. 實現可克隆在Java中
- 7. 無序列化的深克隆實體
- 8. 克隆Java NamingEnumeration?
- 9. Clojure中的克隆序列
- 10. 無法在Eclipse中啓動java應用程序後,mercurial克隆
- 11. jQuery的克隆不克隆
- 12. Java克隆的優點
- 13. stringTokenizer的克隆值java
- 14. 克隆1的Java類
- 15. Java實現克隆,泛型類。
- 16. 在NHibernate中克隆實體?
- 17. HashMap中的Java 8實現
- 18. 在Java中克隆列表
- 19. 在Java中克隆對象
- 20. 實時克隆MovieClip
- 21. 克隆Phonecall實體
- 22. 克隆Java對象
- 23. 替代Java克隆
- 24. java克隆錯誤
- 25. GWT應用程序中使用的Javascript通用克隆()方法
- 26. 無法克隆openshift應用程序
- 27. 從github克隆到heroku應用程序
- 28. 什麼是克隆的實際用法
- 29. EF6實體的通用克隆
- 30. 使用EF6的深度克隆實體
旁註:如果你的元素是整個對象圖不可改變的 - 你不需要克隆它們。 – Fortyrunner 2009-06-15 21:52:09