如何在J2ME/BlackBerry中深度複製矢量?如何在J2ME/BlackBerry中深度複製矢量?
回答
不幸的是,沒有可靠的方法來對矢量對象進行深層複製。
只是快速回顧一下我認爲「深層複製」的含義:深層複製是一個副本,其中不僅複製了一個集合的內容(在本例中爲矢量),而且包含在Vector中的對象被獨立複製。換句話說:如果向量V包含A,並且創建了V的副本(V'),則V'中的A(A')的副本不受A的任何更改影響,反之亦然。
通常,這將通過「克隆」一個對象來實現。不幸的是,如果你無法控制Vector中的對象,那麼你沒有合理的方法克隆它們,特別是因爲JavaME沒有擁有Cloneable接口(據我所知)。當然,如果你確實控制了對象,你可以創建自己的Cloneable接口,該接口指定一個clone()方法,該方法返回一個完全獨立的對象副本。然後,您必須確保您的特殊克隆Vector只接受實現該接口的對象。從那裏,你可以很容易地(代碼方式)製作一個可以克隆自己的Vector。
你將需要複製你的向量的內容與循環。
Enumeration e = projects.elements();
while (e.hasMoreElements()) {
this.projects.addElement((Project) e.nextElement());
}
需要更多信息請參見The Java Forum第2頁回覆18,答案就在那裏。
即確實每個元件的淺表副本。 – 2010-03-22 18:40:58
@DanG這是你在J2ME中可以獲得的最好的東西,你是否還要閱讀Vector Docs? http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy如果我正確讀取了我給出的代碼是深層複製,因爲這兩個向量是獨立的。 – 2010-03-22 18:58:46
一個完整的深拷貝將複製每個子元素和每個子子元素,依此類推。任何時候都不應複製對象引用;總是每個領域的副本。由於您正在複製元素的對象引用,因此這是該級別的淺拷貝。 – 2011-06-13 13:32:07
由於您將此標籤標記爲BlackBerry,而不僅僅是J2ME,因此應該提及有一個CloneableVector類是BlackBerry API的一部分。如果你試圖堅持嚴格的J2ME,這將是沒用的。但是,如果您只是針對BlackBerry,那麼它就能滿足您的需求。
這僅是5.0版本。現在5.0上沒有太多的設備。 – 2010-03-23 14:56:41
事實並非如此,至少在4.6以上,我不想再回頭檢查它什麼時候出現。我碰巧指向5.0文檔。 – Fostah 2010-03-23 15:57:04
我在4.3工作... – 2010-03-24 19:18:10
- 1. 如何在Ruby中深度複製Proc?
- 2. 如何深度複製NSMutableURLRequest?
- 3. 如何深度複製
- 4. 如何複製c中的矢量?
- 5. 深度複製Java中
- 6. 如何創建位圖深度複製
- 7. 如何深度複製NSDictionaries的NSArray?
- 8. 如何深度複製DateTime對象?
- 9. 如何執行Objective-C深度複製
- 10. C++ STL矢量深度擦除
- 11. 深度複製何時發生在QList?
- 12. c中的矢量複製
- 13. 矢量[] vs複製
- 14. 在C ... malloc中深度複製數組?
- 15. 在Matlab中將矢量複製到矢量中
- 16. 如何自我複製矢量?
- 17. 在複製構造函數中複製矢量向量
- 18. 複製/深度複製和變量範圍
- 19. 向量迭代器在深度複製向量時不兼容
- 20. GWT覆蓋深度複製
- 21. Ruby:對象深度複製
- 22. 鏈式Java深度複製?
- 23. elisp的深度複製 - consing
- 24. 深度複製陣列
- 25. Python C APi深度複製
- 26. S4對象深度複製
- 27. 功能深度複製
- 28. 深度複製嘗試
- 29. 深度複製散列表
- 30. 如何複製但不是深度複製網絡圖?
唉,那就是我所害怕的。謝謝。 – 2010-03-23 11:26:27
我可以實現一個可克隆的接口,但它不會像J2ME本地的那麼快。 – 2010-03-23 11:27:02