java copy array how copy clone an array java
Ten samouczek dotyczący kopiowania i klonowania tablic omawia różne metody kopiowania tablicy w języku Java:
Tutaj omówimy operację kopiowania tablic Java. Java udostępnia różne sposoby tworzenia kopii elementów tablicy. Jak wiemy, w Javie tablice mogą zawierać elementy typu pierwotnego lub obiekty lub odwołania.
Wykonując kopie typów prymitywnych zadanie jest raczej łatwe, ale jeśli chodzi o obiekty lub odniesienia, należy zwrócić uwagę, czy kopia jest głęboka, czy płytka.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Shallow copy tworzy kopię elementu. Nie stanowi to problemu w przypadku prymitywnych typów danych. Ale gdy w grę wchodzą odniesienia, płytka kopia skopiuje tylko wartość, a nie podstawowe informacje.
Tak więc, nawet jeśli wykonałeś kopie elementów, zmiana w jednej kopii będzie odzwierciedlona również w drugiej kopii, ponieważ lokalizacje pamięci są współdzielone. Aby temu zapobiec, musisz przejść do głębokiej kopii, w której lokalizacje pamięci nie są udostępniane.
Czego się nauczysz:
Kopiuj i klonuj tablice Java
Java umożliwia kopiowanie tablic przy użyciu metody bezpośredniego kopiowania udostępnianej przez java.util lub klasę System. Zapewnia również metodę klonowania używaną do klonowania całej tablicy.
W tym samouczku omówimy następujące metody kopiowania i klonowania tablic.
- Ręczne kopiowanie za pomocą pętli for
- Korzystanie z System.arraycopy ()
- Korzystanie z Arrays.copyOf ()
- Korzystanie z Arrays.copyOfRange ()
- Korzystanie z Object.clone ()
Odkryjmy!!
Kopiowanie ręczne za pomocą pętli For
Zwykle podczas kopiowania zmiennych, na przykład a i b, wykonujemy operację kopiowania w następujący sposób:
a = b;
Nie będzie działać poprawnie, jeśli zastosujemy tę samą metodę do tablic.
Zobaczmy przykład programowania.
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 Wynik:
W powyższym programie istnieją dwie tablice tj. IntArray i copyArray. Zadanie polega na skopiowaniu zawartości intArray do copyArray. Aby to zrobić, wprowadzono instrukcję copyArray = intArray. To, co się tutaj robi, to przypisanie referencji do tablicy. Dlatego nie jest to faktyczne kopiowanie.
W wyniku powyższej instrukcji lokalizacja pamięci intArray jest również współdzielona przez copyArray. Teraz, gdy element copyArray jest zwiększany, ta zmiana jest również odzwierciedlana w intArray. Jest to pokazane na wyjściu.
Aby rozwiązać ten problem, stosujemy metodę kopiowania tablicy za pomocą pętli for. Tutaj każdy element oryginalnej tablicy jest kopiowany do nowej tablicy przy użyciu pętli for.
Ten program jest pokazany poniżej.
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 Wynik:
Tutaj zmodyfikowaliśmy poprzedni program, aby zawierał pętlę for, a wewnątrz pętli for, przypisujemy każdy element intArray do odpowiedniego elementu copyArray. W ten sposób elementy są faktycznie kopiowane. Więc kiedy jedna tablica jest modyfikowana, zmiany nie są odzwierciedlane w innej tablicy.
Korzystanie z System.arraycopy ()
Klasa System w języku Java zawiera metodę o nazwie „ArrayCOpy”, która umożliwia kopiowanie elementów jednej tablicy do innej.
Ogólny prototyp tej metody jest następujący:
public static void arraycopy( Object src_array, int src_Pos,Object dest_array, int dest_Pos, int length )
Tutaj,
- src_array => Tablica źródłowa, z której ma zostać skopiowana zawartość.
- src_Pos => Pozycja w tablicy źródłowej, od której rozpocznie się kopiowanie.
- dest_array => Tablica docelowa, do której mają zostać skopiowane elementy.
- dest_Pos => Pozycja początkowa w tablicy docelowej dla elementów do skopiowania.
- długość => Długość tablicy do skopiowania.
Zrozummy tę metodę na przykładzie.
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)); } }
Wynik:
W powyższym programie używamy metody „arraycopy”, aby skopiować tablicę do innej tablicy. Możesz zobaczyć wywołanie metody arraycopy. Kopiujemy tablicę źródłową od początku (0thlokalizacja) i skopiuj całą tablicę.
Na koniec wyświetlamy ciąg będący odpowiednikiem zarówno tablicy źródłowej, jak i docelowej.
Za pomocą metody arraycopy można kopiować nawet częściowe tablice, ponieważ przyjmuje ona pozycje elementu początkowego i końcowego jako argumenty. Ta metoda tworzy płytką kopię elementów tablicy.
Korzystanie z Arrays.copyOf ()
Metoda Arrays.copyOf () wewnętrznie wykorzystuje metodę System.arraycopy (). Chociaż nie jest tak wydajna jak arraycopy, może być używana do kopiowania pełnej lub częściowej tablicy, tak jak metoda Arraycopy.
Metoda „copyOf ()” jest częścią pakietu java.util i należy do klasy „Arrays”.
Prototyp tej metody przedstawia się następująco:
public static int() copyOf(int() original_array,int newLength)
Gdzie,
- oryginalny: Tablica, która ma zostać skopiowana do nowej tablicy.
- newLength: Długość kopiowanej tablicy do zwrócenia.
W ten sposób ta metoda tworzy kopię tablicy podanej w pierwszym argumencie do określonej długości przez obcięcie lub uzupełnienie długości o 0 do nowej tablicy. Oznacza to, że jeśli długość skopiowanej tablicy jest większa niż oryginalna tablica, dla pozostałych elementów zastępowane są 0.
Program podany poniżej przedstawia przykład metody 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)); } }
Wynik:
W powyższym programie kopiujemy even_Array o długości 4 za pomocą metody copyOf. Drugi podany argument to 5. W związku z tym nowa skopiowana tablica ma 5 elementów. Pierwsze cztery są takie same jak oryginalna tablica, a piąty element ma wartość 0, ponieważ copyOf wypełnia ją, ponieważ długość oryginalnej tablicy jest mniejsza niż nowej tablicy.
Korzystanie z Arrays.copyOfRange ()
Metoda Arrays.copyOfRange () jest szczególnie używana, gdy chcesz skopiować częściowe tablice. Podobnie jak metoda copyOf (), ta metoda również wewnętrznie wykorzystuje metodę System.arraycopy ().
Prototyp metody Arrays.copyOfRange () jest następujący:
public static short() copyOfRange(short() original, int from, int to)
gdzie,
- oryginalny: Tablica, z której ma zostać skopiowany zakres.
- od: Początkowy indeks zakresu do skopiowania włącznie.
- do: Ostateczny indeks zakresu do skopiowania, z wyłączeniem.
Poniżej przedstawiono przykładową implementację metody 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)); } }
Wynik:
Korzystanie z Object.clone ()
Tablica Java wewnętrznie implementuje klonowalny interfejs, dzięki czemu łatwo jest sklonować tablicę Java. Możesz klonować zarówno jednowymiarowe, jak i dwuwymiarowe tablice. Kiedy klonujesz jednowymiarową tablicę, tworzy ona głęboką kopię elementów tablicy, która kopiuje wartości.
Z drugiej strony, gdy klonujesz tablice dwuwymiarowe lub wielowymiarowe, tworzona jest płytka kopia elementów, tj. Kopiowane są tylko odniesienia. To klonowanie tablic odbywa się za pomocą metody „Clone ()” udostępnianej przez tablice.
Głęboką kopię tablic 1-D w wyniku klonowania można przedstawić w następujący sposób:
Zaimplementujmy teraz klonowanie tablic 1-D w programie 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 Jak widać na wyjściu, wyrażenie sprawdzające równość obu tablic zwraca wartość false. Dzieje się tak, ponieważ klonowanie jednowymiarowej tablicy skutkuje głęboką kopią, w której wartości są kopiowane do nowej tablicy, a nie tylko do odniesień.
Często Zadawane Pytania
Q # 1) Jak wykonać kopię tablicy w Javie?
Odpowiedź: Istnieją różne metody kopiowania tablicy.
- Możesz użyć pętli for i kopiować elementy jeden po drugim.
- Użyj metody clone, aby sklonować tablicę.
- Użyj metody arraycopy () klasy System.
- Użyj metod copyOf () lub copyOfRange () klasy Arrays.
P # 2) Jak przypisać jedną tablicę do drugiej?
Odpowiedź: Tablicę można przypisać innej tablicy za pomocą prostego operatora przypisania (=). Musisz upewnić się, że dwie tablice są tego samego typu danych i mają identyczne wymiary.
P # 3) Co to jest kopia płytka i kopia głęboka?
Odpowiedź: W przypadku płytkiej kopii kopiowane są tylko atrybuty danych obiektów lub tablic. Zatem wszelkie zmiany w skopiowanej tablicy zostaną odzwierciedlone w oryginale. Klonowanie Java jest przykładem płytkiej kopii.
jaki jest najlepszy środek do usuwania wirusów
Głęboka kopia to taka, w której potrzebujemy pełnej kopii obiektu, aby kiedy klonować lub kopiować ten obiekt, była to niezależna kopia. W przypadku typów pierwotnych lub wbudowanych nie ma różnicy między płytką a głęboką kopią.
P # 4) Co robi klon macierzy?
Odpowiedź: Metoda klonowania tablic służy do kopiowania atrybutów jednego obiektu do drugiego. Do tego używa płytkiej kopii.
P # 5) Czy możesz przechowywać tablicę w tablicy?
Odpowiedź: Tablice mogą zawierać tablice dostarczane z elementami tego samego typu (prymitywne lub obiektowe). Oznacza to, że nie można przechowywać tablicy liczb całkowitych w tablicy ciągów.
Wniosek
W tym samouczku zbadaliśmy kopiowanie tablic i klonowanie tablic w języku Java. Widzieliśmy różne metody / podejścia do kopiowania i klonowania tablicy.
Zauważ, że większość tych metod implementuje płytką kopię. W przypadku pierwotnych typów danych kopiowanie płytkie i głębokie nie różni się. Ale gdy tablica zawiera obiekty lub odniesienia, programista musi zaimplementować głęboką kopię zgodnie z wymaganiami.
W naszych kolejnych samouczkach będziemy nadal zgłębiać temat tablic Java.
=> Przeczytaj serię szkoleń Easy Java.
rekomendowane lektury
- Samouczek dotyczący długości tablicy w języku Java z przykładami kodu
- Tablica ogólna Java - jak symulować tablice ogólne w Javie?
- Tablica Java - jak wydrukować elementy tablicy w języku Java?
- Tablice wielowymiarowe w Javie (tablice 2D i 3D w Javie)
- Jak przekazać / zwrócić tablicę w Javie
- Jak posortować tablicę w Javie - samouczek z przykładami
- Java Array - Deklaruj, twórz i inicjuj tablicę w Javie
- Usuń / Usuń element z tablicy w Javie