1 klasaArrays
Jak powiedzieliśmy wcześniej, tablice są bardzo przydatną i często używaną rzeczą w programowaniu.
Twórcy Javy szybko zauważyli, że programiści Javy często piszą ten sam kod podczas pracy z tablicami. Na przykład: „skopiuj część tablicy do innej tablicy”, „wypełnij wszystkie komórki tablicy tymi samymi wartościami”, „wyświetl zawartość tablicy w wygodnej czytelnej formie na ekranie” itp.
Dlatego stworzyli specjalną klasę - Arrays
(pełna nazwa java.util.Arrays
), w której umieścili najpopularniejsze akcje podczas pracy z tablicami.
Ma wiele metod na każdą okazję, ale na początek rozważymy tylko 10 z nich - najprostszych i najczęściej używanych.
2. MetodaArrays.toString()
Pierwsza metoda, której się przyjrzymy, będzie się nazywać Arrays.toString()
. Ale najpierw trochę tła.
Każda tablica w Javie ma metodę toString()
, która zwraca „tekstową reprezentację tablicy”. Możesz uzyskać tekstową reprezentację tablicy za pomocą tej konstrukcji:
String str = Nazwa.toString();
Gdzie Nazwa
jest nazwą zmiennej tablicowej i str
jest nazwą zmiennej, która będzie przechowywać reprezentację łańcuchową tablicy.
Ale jeśli spróbujesz wyświetlić tablicę za pomocą metody , najprawdopodobniej zobaczysz coś takiego:System.out.println(Nazwa)
I@37afeb11
Pierwsza litera I
oznacza, że jest to tablica typu int
, a kolejne znaki@
wskazują adres tablicy w pamięci. Z jednej strony zmienna tablicowa przechowuje dokładnie te informacje, ale z drugiej strony spodziewaliśmy się czegoś innego, prawda?
Chciałbym zobaczyć wartości, które są w tablicy! Aby dokładnie zobaczyć wartości tablicy, wymyślili Arrays.toString()
. Jego wywołanie wygląda następująco:
String str = Arrays.toString(Nazwa);
Przykłady:
|
Zmienna str będzie zawierać wartość ciągu:
|
|
Zmienna str będzie zawierać wartość ciągu:
|
|
Zmienna str będzie zawierać wartość ciągu:
|
3. MetodaArrays.deepToString()
Arrays.toString()
Ale jeśli spróbujesz streścić (wyświetlić) tablicę dwuwymiarową za pomocą metody , zobaczysz coś znajomego:
[I@37afeb11, I@37afeb21, I@37afeb31]
Chodzi o to, że komórki tablicy dwuwymiarowej przechowują łącza do tablic jednowymiarowych. A w jaki sposób jednowymiarowe tablice są konwertowane na łańcuch? Dokładnie tak, jak widzisz powyżej.
I co robić? Jak uzyskać poprawne wyświetlanie tablicy dwuwymiarowej?
Aby to zrobić, klasa Arrays
ma inną specjalną metodę - deepToString()
. Wywołanie wygląda tak:
String str = Arrays.deepToString(Nazwa);
Możesz przekazać dwuwymiarową, jednowymiarową, trójwymiarową i ogólnie tablicę dowolnego wymiaru do tej metody, a ona zawsze wyświetli elementy tablicy.
Uwaga: metoda Arrays.deepToString()
nie działa z jednowymiarowymi tablicami prymitywów (na przykład int[]
).
Przykłady:
|
Zmienna str będzie zawierać wartość ciągu:
|
|
Zmienna str będzie zawierać wartość ciągu:
|
|
Zmienna str będzie zawierać wartość ciągu:
|
4. MetodaArrays.equals()
Znaleźliśmy wyjście tablic na ekran, ale co z porównywaniem tablic?
Aby porównać ciągi, mieliśmy metody equals
i equalsIgnoreCase
, ale jakie metody mają tablice?
Dobrą wiadomością jest to, że tablice mają metodę equals
, a złą wiadomością jest to, że nie porównuje ona zawartości tablic. Metoda array equals
robi to samo co operator ==
- porównuje referencje.
Przykłady:
|
false (linki nie są równe) |
|
Metoda equals array po prostu porównuje referencje dwóch tablic. false (linki nie są równe) |
I co robić? Jak porównać tablice według ich zawartości?
I znowu z pomocą przychodzi klasa Arrays
, a raczej jej metoda, Arrays.equals()
której wywołanie wygląda następująco:
Arrays.equals(Nazwa1, Nazwa2)
Metoda zwraca wartość true
(true), jeśli tablice są równej długości i ich elementy są równe. false
Zwraca (false) w przeciwnym razie .
Przykłady:
|
Metoda equals array po prostu porównuje referencje dwóch tablic. false (linki nie są równe) |
|
true (zawartość tablic jest równa) |
|
false (zawartość tablic jest inna) |
5. MetodaArrays.deepEquals()
I jak już się zapewne domyślasz, metoda Arrays.equals
dla tablic dwuwymiarowych nie zadziała poprawnie: z tablicą dwuwymiarową działa tak samo, jak z tablicą jednowymiarową, której elementami są adresy tablic jednowymiarowych.
Dlatego, aby poprawnie porównać tablice wielowymiarowe ( n=1, 2, 3, ...
), wymyślili Arrays.deepEquals()
. Wezwanie wygląda następująco:
Arrays.deepEquals(Nazwa1, Nazwa2)
Metoda zwraca wartość true
(true) , jeśli tablice są równej długości i ich elementy są równe. W przeciwnym razie zwraca false
(false) . Jeśli elementy wewnątrz tablicy są również tablicami, do ich porównania używana jest metoda Arrays.deepEquals()
i tak dalej.
Przykłady:
|
Metoda equals array po prostu porównuje referencje dwóch tablic. false (linki nie są równe) |
|
Metoda Arrays.equals porówna x1 i x2 jako jednowymiarowe tablice przechowujące referencje. Linki w nich są przechowywane inaczej. false (zawartość tablic nie jest równa) |
|
true (zawartość tablic jest równa) |
GO TO FULL VERSION