java copy array how copy clone an array java
Този урок за копиране и клониране на масиви обсъжда различните методи за копиране на масив в Java:
Тук ще обсъдим операцията за копиране на масиви Java. Java предоставя различни начини, по които можете да правите копия на масивни елементи. Както знаем, в Java масивите могат да съдържат елементи от примитивни типове или обекти или препратки.
Докато правите копия на примитивни типове, задачата е доста лесна, но когато става въпрос за обекти или препратки, трябва да обърнете внимание дали копието е дълбоко или плитко.
=> Погледнете тук ръководството за начинаещи Java.
Плитко копие прави копие на елемента. Не е проблем, когато са включени примитивни типове данни. Но когато са включени препратки, плитко копие просто копира стойността, а не основната информация.
По този начин, въпреки че сте направили копия на елементи, промяната в едно копие ще се отрази и в друго копие, тъй като местата в паметта се споделят. За да предотвратите това, трябва да отидете за дълбоко копие, в което местата в паметта не се споделят.
Какво ще научите:
Копирайте и клонирайте Java масиви
Java ви позволява да копирате масиви, използвайки метода за директно копиране, предоставен от java.util или System class. Той също така предоставя метод на клониране, който се използва за клониране на цял масив.
В този урок ще обсъдим следните методи за копиране и клониране на масиви.
- Ръчно копиране с помощта на цикъл for
- Използване на System.arraycopy ()
- Използване на Arrays.copyOf ()
- Използване на Arrays.copyOfRange ()
- Използване на Object.clone ()
Нека да изследваме !!
Ръчно копиране с помощта на Loop
Обикновено, когато копираме променливи, например 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тиместоположение) и копирайте целия масив.
И накрая, показваме низовия еквивалент както на източника, така и на масивите на дестинацията.
С метода 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 ()’, предоставен от масивите.
Дълбоко копие на 1-D масиви в резултат на клониране може да бъде представено по-долу:
Сега нека приложим едномерното клониране на масив в програма 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. Това е така, защото клонирането на едномерния масив води до дълбоко копиране, при което стойностите се копират в нов масив, а не просто препратки.
често задавани въпроси
В # 1) Как да направя копие на масив в Java?
Отговор: Има различни методи за копиране на масив.
- Можете да използвате цикъл for и да копирате елементи от един в друг един по един.
- Използвайте метода за клониране, за да клонирате масив.
- Използвайте метода arraycopy () от клас System.
- Използвайте методите copyOf () или copyOfRange () от клас Arrays.
В # 2) Как да присвоите един масив на друг?
Отговор: Можете да присвоите масива на друг, като използвате прост оператор за присвояване (=). Трябва да се уверите, че двата масива са от един и същи тип данни и имат еднакви размери.
В # 3) Какво е плитко копие и дълбоко копие?
Отговор: При плитко копиране се копират само атрибутите на въпросните обекти или масиви. Така че всички промени в копирания масив ще се отразят в оригинала. Клонирането на Java е пример за плитко копие.
компании за видеоигри, за които да работят
Дълбоко копие е това, при което се нуждаем от пълно копие на обекта, така че когато клонираме или копираме този обект, той е независимо копие. Когато са включени примитивни или вградени типове, няма разлика между плиткото и дълбокото копие.
Q # 4) Какво прави Array Clone?
Отговор: Методът на клониране на масиви се използва за копиране на атрибутите на един обект в друг. Той използва плитко копие за това.
В # 5) Можете ли да съхранявате масив в масив?
Отговор: Масивите могат да съдържат масиви, снабдени с елементите, които са от същия тип (примитив или обект). Това означава, че не можете да съхранявате цяло число масив в низ масив.
Заключение
В този урок разгледахме масиви за копиране и клониране в Java. Виждали сме различни методи / подходи за копиране и клониране на масив.
Имайте предвид, че повечето от тези методи изпълняват плитко копие. За примитивните типове данни плиткото и дълбокото копиране не се различават. Но когато масивът съдържа обекти или препратки, програмистът трябва да внедри дълбоко копие според изискванията.
В следващите ни уроци ние продължаваме да изследваме повече за масивите на Java.
=> Прочетете серията Easy Training Training.
Препоръчително четене
- Урок за дължина на масив Java с примери за кодове
- Java Generic Array - Как да симулираме Generic Array в Java?
- Java Array - Как да отпечатвате елементи от масив в Java?
- Многомерни масиви в Java (2d и 3d масиви в Java)
- Как да предадете / върнете масив в Java
- Как да сортираме масив в Java - Урок с примери
- Java Array - Декларирайте, създайте и инициализирайте масив в Java
- Премахване / изтриване на елемент от масив в Java