java copy array how copy clone an array java
Овај водич за копирање и клонирање низова разматра различите методе копирања низа у Јави:
Овде ћемо разговарати о операцији копирања Јава низова. Јава пружа разне начине на које можете направити копије елемената низа. Као што знамо, у Јави низови могу садржати елементе примитивних типова или објеката или референци.
Док копирате примитивне типове, задатак је прилично лак, али када су у питању објекти или референце, морате обратити пажњу да ли је копија дубока или плитка.
=> Овде погледајте водич за почетнике Јава.
Плитка копија прави копију елемента. Није проблем када су у питању примитивни типови података. Али када су у питању референце, плитка копија ће само копирати вредност, а не основне информације.
Према томе, иако сте направили копије елемената, промена у једној копији одразиће се и на другој копији док се меморијске локације деле. Да бисте то спречили, морате потражити дубинску копију у којој се меморијске локације не деле.
Шта ћете научити:
Копирајте и клонирајте Јава низове
Јава вам омогућава копирање низова коришћењем методе директног копирања коју пружа јава.утил или системска класа. Такође пружа метод клонирања који се користи за клонирање читавог низа.
У овом упутству ћемо размотрити следеће методе копирања и клонирања низова.
- Ручно копирање помоћу фор петље
- Коришћење Систем.арраицопи ()
- Коришћење Арраис.цопиОф ()
- Коришћење Арраис.цопиОфРанге ()
- Коришћење Објецт.цлоне ()
Истражимо !!
Ручно копирање помоћу функције Лооп
Обично када копирамо променљиве, на пример, а и б, операцију копирања изводимо на следећи начин:
а = б;
Неће радити исправно ако применимо исту методу на низове.
Погледајмо пример програмирања.
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 Излаз:

У горњем програму постоје два низа, тј. ИнтАрраи и цопиАрраи. Задатак је копирање садржаја интАрраи у цопиАрраи. Да би то урадио, уводи се наредба цопиАрраи = интАрраи. Овде се ради са додељивањем референци низа. Стога ово није стварно копирање.
Као резултат горе наведене изјаве, меморијску локацију интАрраи дели и цопиАрраи. Сада када се елемент цопиАрраи повећава, та промена се одражава и на интАрраи. Ово је приказано у излазу.
Да бисмо превазишли овај проблем, користимо методу копирања низа помоћу петље фор. Овде се сваки елемент оригиналног низа копира у нови низ помоћу фор петље.
Овај програм је приказан у наставку.
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 Излаз:

Овде смо модификовали претходни програм тако да укључује фор лооп и инсиде фор лооп, додељујемо сваки елемент интАрраи одговарајућем елементу цопиАрраи. На овај начин се елементи заправо копирају. Дакле, када се један низ модификује, промене се не одражавају у другом низу.
Коришћење Систем.арраицопи ()
Јавина системска класа има методу која се назива „АрраиЦОпи“ која вам омогућава копирање елемената једног низа у други низ.
Општи прототип ове методе је следећи:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Ево,
- срц_арраи => Изворни низ одакле ће се садржај копирати.
- срц_Пос => Положај у изворном низу одакле започиње копирање.
- дест_арраи => Одредишни низ у који се елементи копирају.
- дест_Пос => Почетна позиција у одредишном низу за елементе који се копирају.
- дужина => Дужина низа који се копира.
Да разумемо ову методу на примеру.
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)); } }
Излаз:

У горњем програму користимо методу „арраицопи“ за копирање низа у други низ. Можете видети позив методе арраицопи. Изворни низ копирамо од почетка (0тхлокација) и копирајте читав низ.
На крају, приказујемо еквивалент низа и изворног и одредишног низа.
Помоћу методе арраицопи можете копирати чак и делимичне низове јер за аргументе узимају почетни и крајњи положај елемента. Ова метода прави плитку копију елемената низа.
Коришћење Арраис.цопиОф ()
Метода Арраис.цопиОф () интерно користи методу Систем.арраицопи (). Иако није толико ефикасан као арраицопи, може се користити за копирање целокупног или делимичног низа баш као и метода арраицопи.
Метода ‘цопиОф ()’ део је пакета јава.утил и припада класи „Арраис“.
Прототип ове методе је следећи:
public static int() copyOf(int() original_array,int newLength)
Где,
- оригинал: Низ који се копира у нови низ.
- невЛенгтх: Дужина копираног низа који се враћа.
Дакле, овај метод прави копију низа наведеног у првом аргументу на наведену дужину одсецањем или додавањем дужине са 0 на нови низ. То значи да ако је дужина копираног низа већа од оригиналног низа, 0с се замењују за преостале елементе.
Програм дат у наставку приказује пример методе цопиОф.
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)); } }
Излаз:

У горе наведеном програму копирамо евен_Арраи дужине 4 применом методе цопиОф. Други наведени аргумент је 5. Дакле, нови копирани низ садржи 5 елемената. Прва четири су иста као оригинални низ, а пети елемент је 0 јер га цопиОф поставља јер је дужина оригиналног низа мања од дужине новог низа.
Коришћење Арраис.цопиОфРанге ()
Метода Арраис.цопиОфРанге () посебно се користи када желите да копирате делимичне низове. Попут методе цопиОф (), и ова метода интерно користи методу Систем.арраицопи ().
Прототип методе Арраис.цопиОфРанге () је следећи:
public static short() copyOfRange(short() original, int from, int to)
где,
- оригинал: Низ из којег ће се опсег копирати.
- од: Почетни индекс опсега за копирање, укључујући.
- до: Коначни индекс опсега који се копира, ексклузиван.
Пример примене методе цопиОфРанге је приказан у наставку.
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)); } }
Излаз:

Коришћење Објецт.цлоне ()
Јава низ интерно примењује Цлонеабле интерфејс и тако је лако клонирати Јава низ. Можете да клонирате ни једнодимензионалне ни дводимензионалне низове. Када клонирате једнодимензионални низ, он прави дубинску копију елемената низа који копира вредности.
С друге стране, када клонирате дводимензионалне или вишедимензионалне низове, прави се плитка копија елемената, тј. Копирају се само референце. Ово клонирање низова се врши методом ‘Цлоне ()’ коју пружају низови.
Дубинска копија 1-Д низа као резултат клонирања може бити представљена као испод:

Сада применимо 1-Д клонирање низа у Јава програму.
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 Као што видите у излазу, израз за проверу једнакости оба низа враћа фалсе. То је зато што клонирање једнодимензионалног низа резултира дубинским копирањем при чему се вредности копирају у нови низ, а не само као референце.
Често постављана питања
П # 1) Како направити копију низа у Јави?
Одговор: Постоје различите методе за копирање низа.
- Можете користити фор петљу и један по један копирати елементе једног у други.
- Користите методу клонирања за клонирање низа.
- Користите метод арраицопи () класе Систем.
- Користите методе цопиОф () или цопиОфРанге () класе Арраис.
П # 2) Како доделити један низ другом?
Одговор: Низ можете доделити другом помоћу једноставног оператора доделе (=). Морате осигурати да су два низа истог типа података и да имају идентичну димензију.
П # 3) Шта је плитка копија и дубока копија?
Одговор: У плиткој копији копирају се само атрибути предметних низова или низова. Дакле, све промене копираног низа одражават ће се у оригиналу. Јава клонирање је пример плитке копије.
питања за интервју за орацле пл скл за 8 година искуства
Дубинска копија је она у којој нам је потребна комплетна копија објекта, тако да када клонирамо или копирамо тај објекат, то је независна копија. Када су у питању примитивни или уграђени типови, нема разлике између плитке и дубоке копије.
П # 4) Шта ради клон низа?
Одговор: Метода клонирања низова користи се за копирање атрибута једног објекта у други. За то користи плитку копију.
П # 5) Можете ли сачувати низ у низу?
Одговор: Низови могу садржати низове који имају елементе који су истог типа (примитивни или објектни). То значи да не можете похранити целобројни низ у низ низова.
Закључак
У овом упутству истражили смо низ копија и низове клонова у Јави. Видели смо разне методе / приступе за копирање и клонирање низа.
Имајте на уму да већина ових метода примењује плитку копију. За примитивне типове података, плитка и дубока копија се не разликују. Али када низ садржи објекте или референце, програмер треба да примени дубинску копију према захтевима.
У нашим следећим водичима настављамо да истражујемо више о Јава низовима.
=> Прочитајте серију Еаси Јава Траининг.
Препоручено читање
- Водич за дужину Јава низа са примерима кода
- Јава генерички низ - Како симулирати генеричке низове у Јави?
- Јава низ - Како исписати елементе низа у Јави?
- Мултидимензионални низови у Јави (2д и 3д низови у Јави)
- Како проследити / вратити низ у Јави
- Како сортирати низ у Јави - Водич са примерима
- Јава Арраи - Декларишите, направите и иницијализујте низ у Јави
- Уклони / избриши елемент из низа у Јави