Ни один тривиальный объект не должен предоставлять некоторые для поддержки копирования: даже если это в форме реализации Clone или Serialize.Это более или менее почему нет встроенного метода и цикл неизбежен.
Если это весь ваш собственный код, то я бы порекомендовал конструктор копирования поверх клонирования или сериализации / десериализации, поскольку это больше ОО;вы просите объект создать свою собственную копию, а не просите JVM сделать копию низкого уровня.Такой код очень прост и легок для чтения, поэтому, как мы надеемся, дешевле его поддерживать в долгосрочной перспективе:
public class Widget {
private int x = 0;
public Widget(Widget copyMe){
this.x = copyMe.x;
// ...
}
// ....
}
Вам по-прежнему нужен цикл, чтобы перебрать старую коллекцию, вызывая конструктор копирования для заполнения новой коллекции.,Существует книга под названием «Эффективная Java», в которой подробно рассматриваются подводные камни клонирования и сериализации, которые я очень рекомендую.
Есть некоторые системы, которые действительно нуждаются в очень высокой скорости копирования и сортировки и тому подобное (например, Hadoop).Такие системы возлагают на разработчика ответственность за поддержку собственного двоичного формата (например, byte [] getAsBytes () / public Widget (byte [] fromBytes)).Упаковка многих объектов, превращенных в byte [], в больший массив означает, что все они могут быть скопированы одновременно очень быстро, используя System.arraycopy для большого массива.JVM собирается сделать System.arraycopy как копию памяти низкого уровня.Вам все еще понадобится цикл для десериализации объектов из фрагмента байтов после копирования.
В общем, компилятор и jvm имеют тенденцию очень хорошо оптимизировать базовый код, поэтому, если вы на самом деле не измерите, что у вас есть реальная и измеримая проблема производительности, тогда лучшим будет простой цикл с очень читаемым конструктором копированиядолгосрочный подход.