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 Nazwajest nazwą zmiennej tablicowej i strjest 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 Ioznacza, ż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 strbędzie zawierać wartość ciągu: |
|
Zmienna strbędzie zawierać wartość ciągu: |
|
Zmienna strbę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 Arraysma 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 strbędzie zawierać wartość ciągu: |
|
Zmienna strbędzie zawierać wartość ciągu: |
|
Zmienna strbę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 equalsi 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 equalsrobi to samo co operator ==- porównuje referencje.
Przykłady:
|
false(linki nie są równe) |
|
Metoda equalsarray 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. falseZwraca (false) w przeciwnym razie .
Przykłady:
|
Metoda equalsarray 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.equalsdla 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 equalsarray po prostu porównuje referencje dwóch tablic. false(linki nie są równe) |
|
Metoda Arrays.equalsporówna x1i x2jako 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