Јава копирни низови (Коришћење Систем арраицопи (), Лоопинг конструкције и тако даље)

У овом упутству ћете научити о различитим начинима на које можете да копирате низове (и једнодимензионалне и дводимензионалне) у Јави уз помоћ примера.

У Јави можемо копирати један низ у други. Постоји неколико техника које можете користити за копирање низова у Јави.

1. Копирање низова помоћу оператора додељивања

Узмимо пример,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Излаз :

 1, 2, 3, 4, 5, 6

У горњем примеру, користили смо оператор доделе ( =) за копирање низа именованих бројевима у други низ позитивних бројева.

Ова техника је најлакша и такође делује. Међутим, постоји проблем са овом техником. Ако променимо елементе једног низа, мењају се и одговарајући елементи других низова. На пример,

 class Main ( public static void main(String() args) ( int () numbers = (1, 2, 3, 4, 5, 6); int () positiveNumbers = numbers; // copying arrays // change value of first array numbers(0) = -1; // printing the second array for (int number: positiveNumbers) ( System.out.print(number + ", "); ) ) )

Излаз :

 -1, 2, 3, 4, 5, 6

Овде можемо видети да смо променили једну вредност низа бројева. Када исписујемо низ поситивеНумберс, можемо видети да се мења и иста вредност.

То је зато што се оба низа односе на исти објект низа. То је због плитке копије. Да бисте сазнали више о плиткој копији, посетите плитку копију.

Сада, да бисмо направили нове објекте низа током копирања низова, потребна нам је дубока копија, а не плитка копија.

2. Коришћење конструкције петље за копирање низова

Узмимо пример:

 import java.util.Arrays; class Main ( public static void main(String() args) ( int () source = (1, 2, 3, 4, 5, 6); int () destination = new int(6); // iterate and copy elements from source to destination for (int i = 0; i < source.length; ++i) ( destination(i) = source(i); ) // converting array to string System.out.println(Arrays.toString(destination)); ) )

Излаз :

 (1, 2, 3, 4, 5, 6)

У горњем примеру, користили смо forпетљу за итерацију кроз сваки елемент изворног низа. У свакој итерацији копирамо елементе из изворног низа у одредишни низ.

Овде се изворни и одредишни низ односе на различите објекте (дубинска копија). Дакле, ако се елементи једног низа промене, одговарајући елементи другог низа су непромењени.

Обратите пажњу на изјаву,

 System.out.println(Arrays.toString(destination));

Овде се метода тоСтринг () користи за претварање низа у низ. Да бисте сазнали више, посетите методу тоСтринг () (званична Јава документација).

3. Копирање низова методом арраицопи ()

У Јави класа Систем садржи метод именован arraycopy()за копирање низова. Овај метод је бољи приступ за копирање низова од горе наведена два.

arraycopy()Метод вам омогућава да копирате одређени део изворног низа у низ дестинације. На пример,

 arraycopy(Object src, int srcPos,Object dest, int destPos, int length)

Ево,

  • срц - изворни низ који желите да копирате
  • срцПос - почетна позиција (индекс) у изворном низу
  • дест - одредишни низ где ће се елементи копирати из извора
  • дестПос - почетна позиција (индекс) у одредишном низу
  • дужина - број елемената за копирање

Узмимо пример:

 // To use Arrays.toString() method import java.util.Arrays; class Main ( public static void main(String() args) ( int() n1 = (2, 3, 12, 4, 12, -2); int() n3 = new int(5); // Creating n2 array of having length of n1 array int() n2 = new int(n1.length); // copying entire n1 array to n2 System.arraycopy(n1, 0, n2, 0, n1.length); System.out.println("n2 = " + Arrays.toString(n2)); // copying elements from index 2 on n1 array // copying element to index 1 of n3 array // 2 elements will be copied System.arraycopy(n1, 2, n3, 1, 2); System.out.println("n3 = " + Arrays.toString(n3)); ) )

Излаз :

 н2 = (2, 3, 12, 4, 12, -2) н3 = (0, 12, 4, 0, 0)

У горњем примеру смо користили arraycopy()методу,

  • System.arraycopy(n1, 0, n2, 0, n1.length) - читави елементи из н1 низа се копирају у н2 низ
  • System.arraycopy(n1, 2, n3, 1, 2) - 2 елемента н1 низа почев од индекса 2 се копирају у индекс почев од 1 н3 низа

Као што видите, подразумевана почетна вредност елемената низа типа инт је 0.

4. Копирање низова методом цопиОфРанге ()

За копирање низова можемо користити и методу цопиОфРанге () дефинисану у класи Јава Арраис. На пример,

 // To use toString() and copyOfRange() method import java.util.Arrays; class ArraysCopy ( public static void main(String() args) ( int() source = (2, 3, 12, 4, 12, -2); // copying entire source array to destination int() destination1 = Arrays.copyOfRange(source, 0, source.length); System.out.println("destination1 = " + Arrays.toString(destination1)); // copying from index 2 to 5 (5 is not included) int() destination2 = Arrays.copyOfRange(source, 2, 5); System.out.println("destination2 = " + Arrays.toString(destination2)); ) )

Оутпут

 одредиште1 = (2, 3, 12, 4, 12, -2) одредиште2 = (12, 4, 12)

У горњем примеру, обратите пажњу на ред,

 int() destination1 = Arrays.copyOfRange(source, 0, source.length);

Овде можемо видети да истовремено стварамо одредишни низ и у њега копирамо изворни низ. Не креирамо поље дестинатион1 пре позивања copyOfRange()методе. Да бисте сазнали више о методи, посетите Јава цопиОфРанге.

5. Копирање 2д низова помоћу петље

Слично једнодимензионалном низу, такође можемо копирати дводимензионални низ помоћу forпетље. На пример,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < destination.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); for (int j = 0; j < destination(i).length; ++j) ( destination(i)(j) = source(i)(j); ) ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Излаз :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

У горњем програму, обратите пажњу на ред,

 System.out.println(Arrays.deepToString(destination);

Овде се deepToString()метода користи за пружање бољег приказа дводимензионалног низа. Да бисте сазнали више, посетите Јаву деепТоСтринг ().

Копирање 2д низова помоћу арраицопи ()

Да бисмо горњи код учинили једноставнијим, можемо заменити унутрашњу петљу System.arraycopy()као у случају једнодимензионалног низа. На пример,

 import java.util.Arrays; class Main ( public static void main(String() args) ( int()() source = ( (1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5) ); int()() destination = new int(source.length)(); for (int i = 0; i < source.length; ++i) ( // allocating space for each row of destination array destination(i) = new int(source(i).length); System.arraycopy(source(i), 0, destination(i), 0, destination(i).length); ) // displaying destination array System.out.println(Arrays.deepToString(destination)); ) )

Излаз :

 ((1, 2, 3, 4), (5, 6), (0, 2, 42, -4, 5))

Овде можемо видети да исти резултат добијамо заменом унутрашње forпетље arraycopy()методом.

Занимљиви Чланци...