можно ли клонировать массив string java

Как скопировать массив в Java?

Java предоставляет встроенные методы для копирования массивов, с помощью которых можно сделать полную копию массива или некоторых элементов массива, вы можете сделать это легко с помощью встроенных классов Java.

Методы копирования массива в Java

Object.clone() — можно использовать этот метод для полного копирования массива. Этот метод не подойдет вам, если вы хотите частично скопировать массив.

System.arraycopy() — лучший способ сделать частичную копию массива. В методе определены такие параметры: массив, элементы которого будем копировать; с какого индекса копировать элементы; результирующий массив; первый элемент результирующего массива и общее количество элементов для копирования.

Например System.arraycopy(источник, 3, назначения, 2, 5) — будет скопировано 5 элементов из массива-источника в результирующий массив, начиная с 3-го индекса источника во 2 индекс результирующего массива.

Arrays.copyOf() — если вы хотите скопировать несколько первых элементов массива или сделать полную копию массива, вы можете использовать этот метод. Правда, он не такой универсальный, как System.arraycopy(), но такой же простой в использовании.

Arrays.copyOfRange() — еще один полезный метод частичного копирования массива.

Вот и все полезные методы для полного и частичного копирования массива. Обратите внимание, что все встроенные методы для копирования доступны только для одномерных массивов. Теперь давайте посмотрим эти методы в действии:

Источник

Как скопировать массив в Java? Копирование массивов

В статье поговорим о некоторых методах копирования массивов в Java. Этот язык программирования имеет встроенные методы, предназначенные для решения данных задач. С их помощью вы сможете сделать как полную копию массива, так и выполнить копирование некоторых элементов массива.

Методы для копирования массивов в Java

В Java существует довольно много специальных методов для копирования массивов:

1.В первую очередь, хотелось бы упомянуть Object.clone() — этот метод вы можете использовать для полного копирования массива. Соответственно, если вы хотите скопировать массив частично, этот способ вам не подойдёт.

2.Следующий на очереди — System.arraycopy() — по сути, это один из наилучших способов создать частичную копию массива в Java. В этом методе определены следующие параметры: — массив, элементы которого планируем копировать; — индекс элемента; — итоговый (результирующий) массив; — первый элемент итогового массива; — общее число элементов, предназначенных для копирования.

К примеру, написав System.arraycopy(источник, 2, назначения, 5, 7), вы скопируете семь элементов из массива-источника в итоговый массив, начиная со второго индекса источника в пятый индекс результирующего массива.

4. Arrays.copyOfRange() — полезный метод, обеспечивающий частичное копирование массива.

В принципе, для решения большинства задач по полному либо частичному копированию массивов в Java вышеперечисленных методов вам вполне хватит. Только учтите, что методы, встроенные в Java для копирования, годятся лишь для одномерных массивов.

Пришла пора посмотреть на них в действии.

Теперь посмотрим на результат выполнения нашей программы:

Вот и всё. Если же вы хотите получить действительно продвинутые знания по Java, приходите на наш курс:

Источник

Метод клонирования для массивов Java

что именно возвращает метод clone() в Java при использовании в массиве? Это возвращает новый массив с данными, скопированными с оригинала?

2 ответов

когда clone метод вызывается в массиве, он возвращает ссылку на новый массив, который содержит (или ссылки) те же элементы, что и исходный массив.

если бы изменить int[] b изменения не будут отражены на int[] a после двух отдельные экземпляры объектов.

это становится немного сложнее, когда исходный массив содержит объекты. The clone метод вернет ссылку на новый массив, который ссылается на те же объекты, что и исходный массив.

массивы относятся к тому же элементы.

это означает, что если мы изменим объект, доступ к которому осуществляется через клонированный массив, изменения будут отражены при доступе к тому же объекту в исходном массиве, поскольку они указывают на ту же ссылку.

однако изменения в самом массиве будут влиять только на этот массив.

если вы вообще понимаете, как работают ссылки на объекты, легко понять, как массивы объектов влияют на клонирование и варианта исполнения. Чтобы получить дальнейшее представление о ссылках и примитивах, я бы предложил прочитать это отличное статьи.

clone() метод создает и возвращает копию этого объекта. Точное значение слова «копировать» может зависеть от класса объекта. Общее намерение состоит в том, что для любого объекта X, выражение:

будет верно, и что выражение:

будет верно, но это не абсолютные требования.

Источник

Русские Блоги

Четыре метода копирования массивов в Java: метод arraycopy (), метод clone (), метод copyOf () и copyOfRange ().

Так называемое копирование массива относится к копированию элементов одного массива в другой массив.

вJava Существует четыре способа реализовать копирование массива в Arrays: метод copyOf () и метод copyOfRange () класса Arrays, метод arraycopy () класса System и метод clone () класса Object. Использование этих четырех методов будет подробно описано ниже.

Используйте метод copyOf () и метод copyOfRange ()

1. Используйте метод copyOf (), чтобы скопировать массив.

Формат синтаксиса метода copyOf () класса Arrays следующий: Среди них srcArray представляет массив, который нужно скопировать, а length представляет длину нового массива после копирования.

При копировании массива с помощью этого метода по умолчанию копирование начинается с первого элемента исходного массива (значение индекса равно 0), а длина целевого массива будет равна length. Если длина больше srcArray.length, целевой массив будет заполнен значением по умолчанию; если длина меньше srcArray.length, скопируйте в элемент длины (значение индекса length-1) и остановитесь.

Примечание. Если целевой массив уже существует, он будет восстановлен.

Пример 1

Предположим, что в массиве сохранено 5 оценок. Теперь нам нужно сохранить эти 5 оценок в новом массиве, оставив 3 запасных элемента для дальнейшей разработки.

Используйте метод CopyOf () класса Arrays, чтобы завершить код копирования массива следующим образом:

В приведенном выше коде, поскольку длина оценок исходного массива равна 5, а длина копируемого нового массива newScores равна 8, после копирования 5 элементов в исходном массиве, Содержимое остальных 3 элементов будет заполнено значениями по умолчанию.

Результат выполнения показан ниже.

2. Используйте метод CopyOfRange (), чтобы скопировать массив.

Примечание. Если целевой массив уже существует, он будет реконструирован.

Пример 2

Используйте метод copyOfRange () класса Arrays для завершения кода копирования массива следующим образом:

В приведенном выше коде исходный массив оценок содержит 8 элементов. Используйте метод Arrays.copyOfRange (), чтобы скопировать массив в массив newScores длиной 5 и перехватить массив оценок. Достаточно 5 элементов.

Результат выполнения этой программы показан ниже.

Используйте метод arraycopy ()

При использовании этого метода для копирования массива длина + srcIndex должна быть меньше или равна srcArray.length, а length + destIndex должна быть меньше или равна destArray.length.

Примечание. Целевой массив должен уже существовать и не будет восстановлен, что эквивалентно замене некоторых элементов в целевом массиве.

Пример 3

Предполагая, что оценки 8 студентов сохранены в массиве scores, теперь нам нужно скопировать все элементы массива от второго элемента до конца в массив с именем newScores, длина 12 лет. Элементы в массиве scores располагаются, начиная с третьего элемента в массиве newScores.

Код для использования метода System.arraycopy () для выполнения функции замены элементов массива выглядит следующим образом:

В этой программе сначала определяется массив оценок, содержащий 8 элементов, затем определяется массив newScores, содержащий 12 элементов, а затем цикл for используется для обхода двух массивов An, элементы в выходном массиве. Наконец, используйте метод System.arraycopy () для замены 8 элементов из третьего элемента в массиве newScores на 8 значений элементов в массиве scores.

Результат выполнения этой программы показан ниже.

Примечание. При использовании метода arraycopy () обратите внимание, что именование этого метода нарушает соглашение об именах Java. То есть первая буква второй копии слова не пишется с заглавной буквы, но по соглашению она должна быть записана как arrayCopy. Просим читателей обращать внимание на написание имени метода при использовании этого метода.

Используйте метод clone ()

clone () метод Вы также можете скопировать массив. Этот метод является методом класса Object, Вы можете создать объект с отдельным пространством памяти. Поскольку массив также является классом Object, вы также можете использовать метод clone () объекта массива для копирования массива.

Возвращаемое значение метода clone () имеет тип Object, который должен быть приведен к соответствующему типу с помощью приведения. Его грамматическая форма относительно проста:
Пример инструкции выглядит следующим образом:

Пример 4

В этой программе сначала определяется массив оценок длиной 8, и элементы в выходном массиве массива проходят цикл, а затем определяется и используется новый массив с именем newScores. Метод scores.clone () копирует элементы из массива scores в массив newScores. Наконец, выполните цикл по массиву newScores и выведите элементы массива.

Результат выполнения программы показан ниже.

Из результатов выполнения видно, что элементы массива scores и элементы массива newScores совпадают.

Источник

Методы объектов Java: clone()

Вступление

Эта статья является продолжением серии статей, описывающих часто забываемые методы базового класса объектов языка Java. Ниже приведены методы базового объекта Java, которые присутствуют во всех объектах Java из-за неявного наследования объекта.

Почему существует необходимость клонировать() объект

Сначала я хотел бы начать с того, почему в первую очередь может потребоваться создать клон или копию объекта. Я снова буду использовать свой класс Person из предыдущих статей этой серии для демонстраций, особенно важно то, что это изменяемая его версия, иначе копирование было бы спорным вопросом.

Как только что стало очевидно, присвоение ссылочных типов обрабатывается иначе, чем, скажем, целое число или, возможно, более точно указано int на языке Java. Когда вы назначаете ссылочную переменную другой ссылочной переменной, вы просто указываете ей местоположение, в котором на этот объект можно ссылаться в памяти, что сильно отличается от фактического копирования содержимого, которое происходит, когда вы делаете то же самое с типами значений.

Как клонировать() объект

Для простого класса, такого как Person, который не содержит никаких изменяемых полей, все, что требуется для создания клона, – это вернуть вызов метода клонирования объекта базового класса, например:

В этом примере создание клона человека довольно просто и выполняется примерно так:

К сожалению, хотя эта реализация метода clone() будет работать только с простым типом значений, содержащим объекты, которые не имеют изменяемых ссылочных свойств. Если бы я добавил пару изменяемых полей, таких как мать типа Человек и семья массив Человек объектов, мне нужно было бы внести несколько изменений, чтобы обеспечить безопасное клонирование.

Чтобы продемонстрировать это, мне нужно обновить свой Человек класс вот так.

Если бы я специально не потратил время на индивидуальное создание клонов этих изменяемых полей, то два результирующих объекта Person ссылались бы на одни и те же мать и семья изменяемые экземпляры объектов, что было бы ужасным беспорядком для отладки в будущем. Это явное копирование изменяемых элементов объекта из поля в поле называется глубоким копированием.

Альтернативные методы создания копий экземпляров

Я видел несколько других способов создания клонов объектов, в которых используются такие методы, как сериализация, конструкторы копирования и фабричные методы, создающие копии объектов. Однако в этом разделе я собираюсь рассмотреть только последние два, потому что лично мне не очень нравится использование сериализации для создания копий объектов.

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

В теле конструктора копирования каждому полю копируемого объекта либо непосредственно присваивается новый экземпляр этого класса в случае типов значений, либо используется для создания новых экземпляров их полей в случае ссылочных типов.

Вот пример использования конструктора копирования для класса Person :

Другая техника, которую я покажу, использует фабричный метод. Метод фабричного метода по сути аналогичен конструктору копирования, за исключением того, что новая копия создается внутри статического фабричного метода, который возвращает новый экземпляр в виде копии, например:

Сравнение различий в реализации

Вывод

Как всегда, спасибо за чтение и не стесняйтесь комментировать или критиковать ниже.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *