У меня есть массив объектов с переопределенным методом clone()
. Когда я использую arraycopy()
func, он будет копировать каждый элемент через метод clone()
или он делает мелкую копию? ThanksИспользует ли System.arraycopy метод clone()?
ответ
Оба, 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
Если вы действительно хотите, чтобы скопировать сами объекты, вы должны сделать это вручную. Простой для петли должен делать, если объекты Cloneable
:
Person[] copy = new Person[people.length];
for(int i = 0; i < people.length; ++i) copy[i] = people[i].clone();
Другой, возможно, более элегантное решение при условии, поскольку Java 8:
Person[] copy = Arrays.stream(people).map(Person::clone).toArray(Person[]::new);
System.arraycopy производит мелкую копию указанной части массива.
Итак, цикл 'for' - единственный способ для глубокой копии? –
, предоставляя конструктор копирования для типа элемента массива, вы можете, например, использовать 'java.util.Arrays.stream (objs) .map (T :: new) .toArray (T [] :: new)' для создания массив глубоких копий – muued
- 1. Как работает метод System.arraycopy?
- 2. Как оптимизировать этот метод с помощью System.arraycopy?
- 3. Использует метод clone() -Node класса - хорошо для производительности?
- 4. LongAdder [] + System.arraycopy() =?
- 5. C++ эквивалент Java System.arraycopy
- 6. System.arraycopy с постоянной длиной
- 7. Использует ли метод .dispose() вообще?
- 8. Метод clone() в Java
- 9. Есть ли обстоятельства, что System.arraycopy генерирует IndexOutOfBoundsException?
- 10. System.arraycopy не бросает ArrayIndexOutOfBoundsException
- 11. Использует ли метод System.Reflection.MethodBase.GetCurrentMethod() метод, позволяющий компилятору JIT встраивать метод?
- 12. Как объединить массив байтов в java, а не метод System.arrayCopy()
- 13. Как правильно использовать метод clone()?
- 14. Что заменило метод clone (Serializable)
- 15. java как реализовать System.arraycopy() самостоятельно
- 16. Использование System.arraycopy в Java
- 17. «java.lang.ArrayIndexOutOfBoundsException» с System.arraycopy()
- 18. System.arrayCopy is slow
- 19. Выполнение System.Arraycopy эквивалентно функции
- 20. System.arraycopy throw ArrayIndexOutOfBoundsException
- 21. OpenJDK реализация System.arraycopy
- 22. Что более эффективно: System.arraycopy vs Arrays.copyOf?
- 23. Правильно ли этот метод Ruby использует символы?
- 24. Использует ли метод RemoteApiOptionServiceAccountCredential файл P12?
- 25. Использует ли метод Eigenface неконтролируемый тренинг
- 26. Использует ли метод чтения AudioInputStream заголовок заголовка?
- 27. Использует ли метод C# TimeZoneInfo.ConvertTime DST?
- 28. Использует ли метод ruby object_id ячейку памяти?
- 29. Использует ли метод запроса количество буферизированных элементов?
- 30. Использует ли метод JavaScript array.forEach в Chrome?
Это будет просто скопировать ссылки на объекты, не сами объекты. – isnot2bad