Kopiowanie tablic we właściwy sposób
Natknąłem się na 2 przykłady z moich notatek, które dotyczą kopiowania tablic.
Pierwszy przykład poniżej mówi, że to nie jest sposób na kopiowanie tablicy. Ale kiedy próbowałem uruchomić kod, udało mu się skopiować wszystkie wartości z tablica1 do tablicy2.
int []array1={2,4,6,8,10};
int []array2=array1;
for(int x:array2){
System.out.println(x);
}
Drugi pokazany przykład dotyczył prawidłowego sposobu kopiowania tablicy.
int[] firstArray = {5, 10, 15, 20, 25 };
int[] secondArray = new int[5];
for (int i = 0; i < firstArray.length; i++)
secondArray[i] = firstArray[i];
Moje pytanie brzmi, czy te 2 przykłady nadają się do użycia w kodowaniu, czy też jest to Przykład 2. Gdybyś był moim wykładowcą, użyłbym przykładu 1. Czy dostanę mniej punktów w porównaniu z przykładem 2 metody, czy jest to dokładnie to samo ?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
5 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Drugi przykład faktycznie tworzy drugą tablicę i kopiuje do niej zawartość oryginalnej tablicy.
Istnieją inne prostsze sposoby kopiowania tablic. Możesz użyć lub zamiast wyraźnie kopiowania elementów tablicy przez pętlę.
int[] secondArray = Arrays.copyOf (firstArray, firstArray.length);
lub
Anonimowy użytkownik
Potwierdzenie od:
Powyższy kod jest zamiennikiem dla drugiego przykładu, który pozwala uniknąć pętli for.
I gdzie w twoim pierwszym przykładzie odnoszą się do pierwszej tablicy. Dlatego fakt, który kiedykolwiek miało miejsce z pierwszą tablicą, można zobaczyć z drugiej tablicy.
Moje pytanie brzmi, czy te 2 przykłady są odpowiednie do zastosowań związanych z kodowaniem, czy też preferowany jest przykład 2.
Spójrz jeszcze raz, nie robią nic dla porównania. Pierwsza wskazuje na odwołanie do tablicy, a drugi fragment kodu odnosi się do elementów it it. Dlatego po prostu nie możesz ich porównywać.
Są też inne sposoby kopiowania elementów tablic, takich jak inne wymienione, a ja wolę , ponieważ
1) tworzy w sobie inny obiekt tablicy i zwraca go do miejsca, w którym System.arraycopy używa przekazanej tablicy.
2) klon jest zbyt wolny. Nigdy nie używaj go, jeśli nie masz innego wyjścia.
Jest kilka powodów, dla których unikam klona. Tutaj http://www.artima.com/intv/bloch13.html
(
podczas klonowania poszczególnych elementów
).
Anonimowy użytkownik
Potwierdzenie od:
Jak myślisz, co to wydrukuje?
<blockquote class="spoiler">
0
Wyświetli 0, ponieważ wskazuje teraz na :
obie zmienne odnoszą się teraz do tego samego obiektu,
więc zmiana zawartości któregokolwiek z nich będzie wyglądać jak zmiana obu.
Więc twoja pierwsza metoda NOT nazywa się array copy.
To proste przypisanie jednej zmiennej do drugiej,
w tym przypadku przypisanie wartości z do ,
więc obie zmienne wskazują na to samo.
Jeśli chodzi o drugą metodę,
to o wiele prostszy sposób na zrobienie tego samego:
int[] array2 = array1.clone();
Anonimowy użytkownik
Potwierdzenie od:
jedna tablica
z dwiema zmiennymi,
odnosząc się
na nim. Przypisanie przenosi tylko odniesienie do tablicy. Zatem zarówno , jak i wskazują na tę samą tablicę. To nie jest kopia. Spróbuj ustawić
firstArray [0] = 99
i wypisać , a zobaczysz, że to ta sama tablica.W drugim przykładzie ta rzeczywista kopia - utworzyłeś nową tablicę i skopiował każdą wartość. Teraz miejsce docelowe Fistarray [0] = 99 nie zmieni tablicy, do której , ponieważ to
Kopiuj
.
Tak więc odpowiedź jest taka: jeśli dasz pierwszy sposób, otrzymasz niższe oceny.
W rzeczywistości istnieją lepsze sposoby kopiowania tablic za pomocą , lub .
Anonimowy użytkownik
Potwierdzenie od:
W drugim przykładzie tworzysz tablicę int za pomocą operatora i ręcznie kopiujesz do niej elementy za pomocą pętli for. Za każdym razem, gdy używasz operatora w Javie, następuje nowa alokacja pamięci (tworzenie obiektów).
Gdzie, tak jak w pierwszym przypadku, jest to tylko przypisanie referencji, oba wskazują na tę samą tablicę. Możesz łatwo sprawdzić, czy zmieniając zawartość jednej tablicy, zobaczysz ten sam efekt w drugiej tablicy. Nie stanie się to w przypadku drugiej kopii tablicy.
int []array2=array1;