java copy array how copy clone an array java
Цей підручник з копіювання та клонування масивів обговорює різні методи копіювання масиву на Java:
Тут ми обговоримо операцію копіювання масивів Java. Java пропонує різні способи, за допомогою яких ви можете робити копії елементів масиву. Як ми знаємо, в Java масиви можуть містити елементи або примітивних типів, або об'єкти, або посилання.
Роблячи копії примітивних типів, завдання досить легке, але коли справа стосується об'єктів або посилань, вам потрібно звернути увагу на те, глибока чи дрібна копія.
=> Подивіться тут посібник для початківців Java.
Неглибока копія робить копію елемента. Це не проблема, коли задіяні примітивні типи даних. Але коли задіяні посилання, неглибока копія просто копіює значення, а не основну інформацію.
Таким чином, навіть незважаючи на те, що ви зробили копії елементів, зміна однієї копії відображатиметься і в іншій копії, оскільки місця спільної пам'яті будуть спільними. Щоб цього не сталося, потрібно скористатися глибокою копією, в якій місця пам’яті не є спільними.
Що ви дізнаєтесь:
Копіювати та клонувати масиви Java
Java дозволяє копіювати масиви за допомогою методу прямого копіювання, наданого java.util або класу System. Він також надає метод клонування, який використовується для клонування цілого масиву.
У цьому підручнику ми обговоримо наступні методи копіювання та клонування масивів.
- Копіювання вручну за допомогою циклу for
- Використання System.arraycopy ()
- Використання Arrays.copyOf ()
- Використання Arrays.copyOfRange ()
- Використання Object.clone ()
Давайте досліджувати !!
Копіювання вручну за допомогою циклу
Зазвичай, коли ми копіюємо змінні, наприклад, a та b, ми виконуємо операцію копіювання наступним чином:
a = b;
Це не буде працювати правильно, якщо ми застосуємо той самий метод до масивів.
Подивимось приклад програмування.
public class Main { public static void main(String[] args) { int intArray[] = {12,15,17}; //print original intArray System.out.println('Contents of intArray[] before assignment:'); for (int i=0; i Вихід:
У наведеній вище програмі є два масиви, тобто intArray та copyArray. Завдання - скопіювати вміст intArray до copyArray. Для цього вводиться вираз copyArray = intArray. Тут робиться посилання на масив, призначені. Отже, це не фактичне копіювання.
В результаті вищезазначеного твердження, розташування пам'яті intArray також передається copyArray. Тепер, коли елемент copyArray збільшується, ця зміна відображається і в intArray. Це показано в результатах.
Для подолання цієї проблеми ми використовуємо метод копіювання масиву за допомогою циклу for. Тут кожен елемент вихідного масиву копіюється до нового масиву за допомогою циклу for.
Ця програма показана нижче.
public class Main { public static void main(String[] args) { int intArray[] = {12,15, 17}; // define an array copyArray to copy contents of intArray int copyArray[] = new int[intArray.length]; // copy contents of intArray to copyArray for (int i=0; i Вихід:
Тут ми змінили попередню програму, щоб включити для циклу, а всередині для циклу, ми присвоюємо кожен елемент intArray відповідному елементу copyArray. Таким чином, елементи фактично копіюються. Отже, коли один масив модифікується, зміни не відображаються в іншому масиві.
Використання System.arraycopy ()
Клас Java у системі має метод 'ArrayCOpy', який дозволяє копіювати елементи одного масиву в інший масив.
Загальний прототип цього методу такий:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Ось,
- src_array => Масив джерела, звідки слід скопіювати вміст.
- src_Pos => Позиція в вихідному масиві, звідки розпочнеться копіювання.
- dest_array => Масив призначення, до якого слід скопіювати елементи.
- dest_Pos => Початкове положення в цільовому масиві для елементів, які потрібно скопіювати.
- довжина => Довжина масиву, який потрібно скопіювати.
Давайте розберемося з цим методом на прикладі.
class Main { public static void main(String[] args) { //declaring a source array char[] src_array = { 'S','o','f','t','w','a','r','e','T','e','s','t','i','n','g','H','e','l','p'}; char[] dest_array = new char[19]; System.arraycopy(src_array, 0, dest_array, 0,19); System.out.println('Source array:' + String.valueOf(src_array)); System.out.println('Destination array after arraycopy:'+ String.valueOf(dest_array)); } }
Вихід:
У наведеній вище програмі ми використовуємо метод «arraycopy» для копіювання масиву в інший масив. Ви можете побачити виклик методу arraycopy. Ми копіюємо вихідний масив з самого початку (0гоlocation) і скопіюйте весь масив.
Нарешті, ми відображаємо рядковий еквівалент як вихідного, так і цільового масивів.
За допомогою методу arraycopy ви можете копіювати навіть часткові масиви, оскільки для аргументів приймає позиції початкового та кінцевого елементів. Цей метод робить поверхневу копію елементів масиву.
Використання Arrays.copyOf ()
Метод Arrays.copyOf () внутрішньо використовує метод System.arraycopy (). Хоча це не настільки ефективно, як arraycopy, його можна використовувати для копіювання повного або часткового масиву так само, як метод arraycopy.
Метод ‘copyOf ()’ є частиною пакету java.util і належить до класу “Масиви”.
Прототип цього способу такий:
public static int[] copyOf(int[] original_array,int newLength)
Де,
- оригінал: Масив, який потрібно скопіювати до нового масиву.
- newLength: Довжина скопійованого масиву, який потрібно повернути.
Таким чином, цей метод робить копію масиву, наданого в першому аргументі, до заданої довжини шляхом усічення або додавання довжини до 0 до нового масиву. Це означає, що якщо довжина скопійованого масиву більше вихідного масиву, 0s замінюються на інші елементи.
Наведена нижче програма показує приклад методу copyOf.
importjava.util.Arrays; public class Main { public static void main(String args[]) { // define original array int[] even_Array = new int[] {2,4,6,8}; System.out.println('Original Array:' + Arrays.toString(even_Array)); // copying array even_Array to copy_Array int[] copy_Array = Arrays.copyOf(even_Array,5); System.out.println('Copied Array:' + Arrays.toString(copy_Array)); // assign value to unassigned element of copied array copy_Array[4] = 10; System.out.println('Copied and modified Array:' + Arrays.toString(copy_Array)); } }
Вихід:
У наведеній вище програмі ми копіюємо even_Array довжиною 4 за допомогою методу copyOf. Другий аргумент - 5. Отже, новий скопійований масив містить 5 елементів. Перші чотири такі ж, як оригінальний масив, а п'ятий елемент дорівнює 0, оскільки copyOf додає його, оскільки довжина вихідного масиву менша, ніж довжина нового масиву.
Використання Arrays.copyOfRange ()
Метод Arrays.copyOfRange () спеціально використовується, коли потрібно скопіювати часткові масиви. Як і метод copyOf (), цей метод також внутрішньо використовує метод System.arraycopy ().
Прототип методу Arrays.copyOfRange () такий:
public static short[] copyOfRange(short[] original, int from, int to)
де,
- оригінал: Масив, з якого слід скопіювати діапазон.
- від: Початковий індекс діапазону, який потрібно скопіювати, включно.
- до: Кінцевий індекс діапазону, який потрібно скопіювати, ексклюзивний.
Приклад реалізації методу copyOfRange показано нижче.
import java.util.Arrays; class Main { public static void main(String args[]) { int intArray[] = { 10,20,30,40,50 }; // to index is within the range int[] copyArray = Arrays.copyOfRange(intArray, 2, 6); System.out.println('Array copy with both index within the range: ' + Arrays.toString(copyArray)); //to index is out of range int[] copy1 = Arrays.copyOfRange(intArray, 4, intArray.length + 3); System.out.println('Array copy with to index out of range: ' + Arrays.toString(copy1)); } }
Вихід:
Використання Object.clone ()
Масив Java внутрішньо реалізує інтерфейс Cloneable, і тому легко клонувати масив Java. Ви можете клонувати одновимірні, а також двовимірні масиви. Коли ви клонуєте одновимірний масив, він робить глибоку копію елементів масиву, яка копіює значення.
З іншого боку, коли ви клонуєте двовимірні або багатовимірні масиви, робиться неглибока копія елементів, тобто копіюються лише посилання. Таке клонування масивів виконується методом ‘Clone ()’, що надається масивами.
Глибоку копію одновимірних масивів в результаті клонування можна представити, як показано нижче:
Тепер реалізуємо клонування одновимірного масиву в програмі Java.
class Main { public static void main(String args[]) { int num_Array[] = {5,10,15,20,25,30}; int clone_Array[] = num_Array.clone(); System.out.println('Original num_Array:'); for (int i = 0; i Як ви можете бачити на виході, вираз для перевірки рівності обох масивів повертає false. Це пояснюється тим, що клонування одновимірного масиву призводить до глибокого копіювання, де значення копіюються в новий масив, а не просто посилаються.
Часті запитання
Q # 1) Як зробити копію масиву в Java?
Відповідь: Існують різні методи копіювання масиву.
- Ви можете використовувати цикл for і копіювати елементи одного в інший по одному.
- Використовуйте метод клонування для клонування масиву.
- Використовуйте метод arraycopy () системного класу.
- Використовуйте методи copyOf () або copyOfRange () класу Arrays.
Q # 2) Як ви призначаєте один масив іншому?
Відповідь: Ви можете призначити масив іншому за допомогою простого оператора присвоєння (=). Ви повинні переконатися, що два масиви мають однаковий тип даних і мають однаковий розмір.
Запитання №3) Що таке мілка та глибока копія?
Відповідь: У дрібній копії копіюються лише атрибути відповідних об'єктів або масивів. Тож будь-які зміни скопійованого масиву відображатимуться в оригіналі. Клонування Java - приклад неглибокої копії.
безкоштовне програмне забезпечення годинника, що базується на Інтернеті -
Глибока копія - це та, в якій нам потрібна повна копія об'єкта, щоб, коли ми клонуємо або копіюємо цей об'єкт, це була незалежна копія. Коли задіяні примітивні або вбудовані типи, немає різниці між мілкою та глибокою копією.
Q # 4) Що робить Array Clone?
Відповідь: Метод клонування масивів використовується для копіювання атрибутів одного об'єкта в інший. Для цього використовується неглибока копія.
Q # 5) Чи можете ви зберегти масив у масиві?
Відповідь: Масиви можуть містити масиви, що мають елементи одного типу (примітивні чи об’єктні). Це означає, що ви не можете зберігати цілочисельний масив у масиві рядків.
Висновок
У цьому посібнику ми дослідили масив копіювання та клонування масивів у Java. Ми бачили різні методи / підходи для копіювання та клонування масиву.
Зверніть увагу, що більшість із цих методів реалізують неглибоку копію. Для примітивних типів даних поверхнева та глибока копія не відрізняється. Але коли масив містить об’єкти або посилання, програміст повинен реалізувати глибоку копію відповідно до вимог.
У наступних підручниках ми продовжуємо вивчати більше про масиви Java.
=> Прочитайте серію Easy Java Training.
Рекомендована література
- Підручник з довжини масиву Java із прикладами коду
- Загальний масив Java - Як імітувати загальні масиви в Java?
- Java Array - Як надрукувати елементи масиву в Java?
- Багатовимірні масиви на Java (2d та 3d масиви на Java)
- Як передати / повернути масив на Java
- Як відсортувати масив на Java - Підручник з прикладами
- Java Array - Оголошення, створення та ініціалізація масиву в Java
- Видалення / видалення елемента з масиву в Java