我有一個覆蓋clone()
方法的對象數組。當我使用arraycopy()
函數時,它是否會通過clone()
方法複製每個元素,或者它會生成一個淺度副本? 謝謝System.arraycopy是否使用clone()方法?
-1
A
回答
1
Both,System.arraycopy(...)
以及Arrays.copyOf(...)
只是創建原始數組的一個(淺)副本;他們不會自己複製或克隆包含的對象:
// given: three Person objects, fred, tom and susan
Person[] people = new Person[] { fred, tom, susan };
Person[] copy = Arrays.copyOf(people, people.length);
// true: people[i] == copy[i] for i = 0..2
如果您確實想要自己複製對象,則必須手動執行此操作。一個簡單的for循環應該做的,如果對象是Cloneable
:
Person[] copy = Arrays.stream(people).map(Person::clone).toArray(Person[]::new);
3
System.arraycopy會生成指定數組部分的淺表副本。
+0
那麼'for'循環是深拷貝的唯一途徑? – 2015-04-01 23:16:07
+0
通過爲數組的元素類型提供複製構造函數,您可以使用'java.util.Arrays.stream(objs).map(T :: new).toArray(T [] :: new)'創建一組深度複製 – muued 2015-04-01 23:25:02
相關問題
- 1. 如何使用System.arraycopy優化此方法?
- 2. System.arraycopy是內存轉移和堆使用的有效方法嗎?
- 3. 如何使用System.arraycopy?
- 4. Python是否有類似於Java的System.arraycopy?
- 5. 在Java中使用System.arraycopy
- 6. LinkedList中的clone()方法
- 7. Java中的clone()方法
- 8. 爲什麼System.arraycopy不是camelCased?
- 9. LongAdder [] + System.arraycopy()=?
- 10. 在git svn clone中使用--no-metadata是否有優勢?
- 11. 是否可以將git clone設置爲始終使用--reference?
- 12. 是否需要使用BigDecimal.new方法?
- 13. 我是否正在使用BEM方法?
- 14. 檢查方法是否使用PInvoke
- 15. 我是否正確使用* ngFor方法?
- 16. 使用clone()複製隱藏的元素 - 更好的方法?
- 17. 使用.clone()方法創建的多行jQuery UI自動完成
- 18. 如何使用clone()方法克隆Java對象
- 19. 克隆使用JQuery clone()方法動態添加html內容
- 20. 我應該使用Angular.copy()還是_.clone()?
- 21. 「java.lang.ArrayIndexOutOfBoundsException」with System.arraycopy()
- 22. System.arrayCopy很慢
- 23. OpenJDK實現System.arraycopy
- 24. 如何繼承方法operator =,clone和dispose
- 25. Lucene Query.java不再支持clone()方法嗎?
- 26. PriorityQueue中的clone()方法實現
- 27. 如何在TypeScript中實現clone()方法?
- 28. 什麼替換了方法clone(Serializable)
- 29. jquery中的.clone()和.remove()方法
- 30. java中的clone()方法如何工作?
它會引用剛纔複製的對象,而不是:
另一個,也許更優雅的解決方案,因爲Java的8提供對象本身。 – isnot2bad 2015-04-01 23:12:54