„Amigo, mam nadzieję, że już zdałeś sobie sprawę, jak przydatne są tablice w programowaniu?”
„Zdecydowanie, Rishi! Rozwiązałem już więcej niż jedno zadanie”.
„Czy twoje zadania miały powtarzalne czynności? Takie, które wykonywałeś w kółko”.
„Jeśli dobrze cię zrozumiałem, masz na myśli podobne działania w różnych zadaniach? Na przykład wszędzie używanie pętli do wyświetlania zawartości tablicy — mam już tego dość!”
„Tak, o to mi chodzi. Twórcy Javy zauważyli, że programiści Javy często piszą ten sam kod podczas pracy z tablicami. Na przykład kod kopiujący część tablicy do innej tablicy lub kod wypełniający każdą komórkę tablicy tym samym value.Albo twój przykład: kod do wyświetlenia zawartości tablicy w czytelnej formie na ekranie.
„A prawdziwi programiści mają jedną bardzo ważną zasadę: nie powtarzaj się. Zgodzisz się, że wykonywanie zbędnej pracy jest złe – nie dostaniesz za to zapłaty. Efektywna praca jest dobrze płatna, wierz mi. Nawiasem mówiąc, początkujący kod jest natychmiast rozpoznawalny dzięki dużej ilości powtarzającego się kodu.
„Twórcy Javy zastanowili się nad tym i stworzyli specjalną Arrays
klasę (jej pełna nazwa to java.util.Arrays
), umieszczając w niej najpopularniejsze akcje związane z tablicami”.
„Hmm… Bardzo interesujące. Więc co dokładnie zawiera?
„Ma wiele metod na każdą okazję, ale najpierw rozważymy tylko 10 z nich — najprostszych i najczęściej używanych.
Arrays.toString()
„Pierwsza metoda, której się przyjrzymy, to Arrays.toString()
… Ale najpierw trochę tła.
„Każda tablica w Javie ma toString()
metodę, która zwraca„ tekstową reprezentację tablicy ”. Tekstową reprezentację tablicy można uzyskać za pomocą następującej instrukcji:
String str = name.toString();
„Gdzie name
jest nazwa zmiennej tablicowej i str
czy jest to nazwa zmiennej, która będzie przechowywać ciąg reprezentujący tablicę. Amigo, czy próbowałeś wydrukować tablicę na ekranie za pomocą tej metody?System.out.println(name)
Przyznaję, tak się stało. Widziałem jakiś bełkot. Postanowiłem trzymać się z dala od niebezpieczeństw i nadal używać pętli.
„Najprawdopodobniej widziałeś coś takiego:
I@37afeb11
„Pierwsza litera I
oznacza, że jest to int
tablica, a kolejne symbole@
to adres pojedynczego obiektu w pamięci. Można o tym myśleć jak o adresie tablicy w pamięci. Z jednej strony jest to dokładnie informacja przechowywana w zmiennej tablicowej, ale z drugiej strony spodziewałeś się czegoś innego, prawda?”
„Dokładnie! Planowałem zobaczyć wartości w tablicy. To była ostatnia rzecz, jakiej się spodziewałem”.
„I właśnie dlatego wymyślili metodę Arrays.toString()
— wyświetlanie wartości tablicy. Nazywamy to tak:
String str = Arrays.toString(name);
Przykłady:
|
Zmienna str będzie zawierać ciąg"[1, 2, 3]" |
|
Zmienna str będzie zawierać ciąg"[]" |
|
Zmienna str będzie zawierać ciąg"[Hi, How's, life?]" |
Arrays.deepToString()
„Jednak toString()
metoda nie jest odpowiednia, jeśli chodzi o tablice dwuwymiarowe. Innymi słowy, jeśli spróbujesz wywołać Arrays.toString()
, zobaczysz coś znajomego:
[I@37afeb11, I@37afeb21, I@37afeb31]
„To wszystko dlatego, że komórki tablicy dwuwymiarowej przechowują odniesienia do tablic jednowymiarowych. A jak tablice jednowymiarowe są konwertowane na ciąg znaków? Dokładnie tak, jak widać powyżej.
„Co w takim razie robić? Jak poprawnie wyświetlić tablicę dwuwymiarową?”
„Twórcy Javy też to przewidzieli. W tym celu Arrays
klasa ma jeszcze jedną specjalną metodę — deepToString()
. Wywołanie jej wygląda następująco:
String str = Arrays.deepToString(name);
„Ta metoda może przekazywać tablice, które są dwuwymiarowe, jednowymiarowe, trójwymiarowe lub ogólnie w dowolnym wymiarze, i zawsze wyświetla elementy tablicy.
Przykłady:
|
Zmienna str będzie zawierać ciąg"[1, 2, 3]" |
|
Zmienna str będzie zawierać ciąg"[[1, 1], [2, 2], [3, 3]]" |
|
Zmienna str będzie zawierać ciąg"[[[1, 2, 3], [1]], [[]]]" |
Arrays.equals()
„Wymyśliliśmy, jak wyświetlać tablice na ekranie. A co z porównywaniem tablic? Pamiętasz, jakimi metodami możemy porównywać ciągi znaków?”
„Zwykle stosuję equals
metodę!
„Tak, equals
, a także equalsIgnoreCase
(który porównuje ciągi znaków bez względu na wielkie i małe litery).
„Dobra wiadomość: możesz również użyć equals
metody tablic. Zła wiadomość: nie porównuje zawartości tablic. Metoda equals
tablic robi to samo, co ==
operator — porównuje referencje.
Przykłady:
|
false (referencje nie są równe) |
|
Metoda equals po arrays prostu porównuje referencje dwóch tablic. false (referencje nie są równe) |
„Więc co robimy? Jak porównujemy tablice na podstawie ich zawartości?”
„Znów Arrays
przychodzi nam na ratunek klasa, a dokładniej jej Arrays.equals()
metoda. Oto jak ją nazywamy:
Arrays.equals(name1, name2)
„Metoda zwraca, true
jeśli tablice są równej długości i ich elementy są równe. W przeciwnym razie zwraca false
.
Przykłady:
|
Metoda equals po arrays prostu porównuje referencje dwóch tablic. false (referencje nie są równe) |
|
true (zawartość jest równa) |
|
false (zawartość tablic jest inna) |
Arrays.deepEquals()
„I jak już zapewne się domyślacie, Arrays.equals
metoda nie zadziała poprawnie w przypadku tablic dwuwymiarowych: traktuje tablice dwuwymiarowe jak tablicę jednowymiarową, której elementami są adresy tablic jednowymiarowych.
„Dlatego, aby poprawnie porównać tablice wielowymiarowe ( n = 1, 2, 3,...
), wymyślili metodę Arrays.deepEquals()
. Wywołanie jej wygląda tak:
Arrays.deepEquals(name1, name2)
„Metoda zwraca true
, jeśli tablice są równej długości i ich elementy są równe. W przeciwnym razie zwracafalse
. Jeśli elementy wewnątrz tablicy są również tablicami, to Arrays.deepEquals()
metoda jest używana do ich porównania i tak dalej.
Przykłady:
|
Metoda equals po arrays prostu porównuje referencje dwóch tablic. false (referencje nie są równe) |
|
Metoda Arrays.equals porówna i jako jednowymiarowe tablice przechowujące referencje. Zawierają różne odniesienia. (zawartość tablic nie jest równa) x1 x2 false |
|
true (zawartość jest równa) |
„Dziękuję, Rishi! Ta lekcja jest właśnie tym, czego potrzebowałem, aby uczynić moje życie łatwiejszym i szczęśliwszym w przyszłości. Teraz będę korzystał z metod klasy Arrays i jeszcze szybciej będę pisał swoje programy.
„Na to właśnie liczyłem, ha-ha. Ale to nie wszystkie interesujące metody w klasie Arrays. O innych opowiem ci następnym razem”.
GO TO FULL VERSION