1. MetodaArrays.fill()
Bardzo często podczas pracy z tablicami programiści Javy mają zadanie: wypełnić tablicę tymi samymi wartościami. Możesz oczywiście napisać pętlę i po prostu przypisać określoną wartość do każdej komórki tablicy w pętli:
int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;
Lub możesz po prostu wywołać metodę Arrays.fill()
, która robi dokładnie to samo: wypełnia przekazaną tablicę przekazaną wartością. Oto jak to wygląda:
Arrays.fill(Nazwa, oznaczający)
A kod z powyższego przykładu można uczynić nieco bardziej zwięzłym i bardziej przejrzystym:
int[] x = new int[100];
Arrays.fill(x, 999);
Za pomocą metody Arrays.fill()
możesz wypełnić określoną wartością nie całą tablicę, ale jej część:
Arrays.fill(Nazwa, первый, последний, oznaczający)
Gdzie pierwsza i ostatnia to numery pierwszej i ostatniej komórki do wypełnienia.
Przykład:
|
Wypełnij komórki x[3] , x[4] , x[5] , x[6] wartościami 999 . Numerowanie komórek tablicy od zera! Zmienna str zawiera wartość:
|
Metoda Arrays.fill()
działa tylko z tablicami jednowymiarowymi. Jeśli zostanie do niej przekazana tablica dwuwymiarowa, zostanie ona przetworzona jako tablica jednowymiarowa, ze wszystkimi wynikającymi z tego konsekwencjami.
2. MetodaArrays.copyOf()
Jak już wiesz, rozmiaru kontenera tablicy nie można zmienić po jego utworzeniu.
A jeśli naprawdę chcesz?
Cóż, jeśli naprawdę chcesz, możesz:
- Utwórz nową tablicę o żądanej długości
- Skopiuj do niej wszystkie elementy z pierwszej tablicy.
Nawiasem mówiąc, dokładnie to robi ta metoda Arrays.copyOf()
. Oto jak wygląda jego połączenie:
тип[] Nazwa2 = Arrays.copyOf(Nazwa, длина);
Ta metoda nie zmienia istniejącej tablicy , zamiast tego tworzy nową tablicę i kopiuje do niej elementy starej tablicy.
Jeśli elementy nie pasują ( długość jest mniejsza niż długość istniejącej tablicy ), to dodatkowe wartości są ignorowane.
Jeśli długość nowej tablicy jest większa niż długość starej, komórki są wypełniane zerami.
Przykład:
|
Zmienna str2 zawiera wartość:
Zmienna str3 zawiera wartość:
|
3. MetodaArrays.copyOfRange()
Ale co, jeśli chcesz uzyskać tablicę o długości 5 z tablicy o długości 10, ale nie pierwszych 5 elementów, ale ostatnich 5?
W tym przypadku będziesz potrzebować innej metody klasowej Arrays
- metody.Oto Arrays.copyOfRange()
jak wygląda jej wywołanie:
тип[] imię2 = Arrays.copyOfRange(Nazwa, первый, последний);
Ta metoda również tworzy nową tablicę, ale wypełnia ją danymi z dowolnego miejsca w oryginalnej tablicy. Gdzie first i last to numery pierwszej i ostatniej komórki, które powinny znaleźć się w nowej tablicy.
Przykład:
|
Zmienna str2 zawiera wartość:
Zmienna str3 zawiera wartość:
|
4. MetodaArrays.sort()
Cóż, najsmaczniejsze - sortowanie . W programowaniu sortowanie tablic jest bardzo powszechne. Trzy najczęstsze działania podczas pracy z tablicami to:
- Sortowanie tablicowe
- Znalezienie minimalnego (lub maksymalnego) elementu tablicy
- Określanie indeksu elementu w tablicy (wyszukiwanie elementu w tablicy)
I dlatego projektanci Javy Arrays
uwzględnili sort()
. Oto jak wygląda jego połączenie:
Arrays.sort(Nazwa);
Ta metoda sortuje przekazaną tablicę w porządku rosnącym.
Przykład:
|
Zmienna str zawiera wartość:
|
Świetnie, prawda? Wywołałem jedną metodę, a tutaj masz kolejną posortowaną tablicę. Uroda.
Nawiasem mówiąc, możesz sortować nie tylko całą tablicę, ale także część tablicy. Oto jak wygląda jego połączenie:
Arrays.sort(Nazwa, первый, последний);
Gdzie first i last to numery pierwszej i ostatniej komórki do sortowania.
Przykład:
|
Zmienna str zawiera wartość:
|
Java sortuje tablice przy użyciu najszybszego algorytmu sortowania, QuickSort . Szybkość sortowania zależy od rozmiaru tablicy i jest obliczana za pomocą wzoru N*Log(N).
Sortowanie tablicy 1000 elementów będzie zawierać około 3_000 porównań komórek tablicy. Sortowanie tablicy składającej się z miliona elementów będzie zawierało około 6 milionów porównań.
5. MetodaArrays.binarySearch()
Otóż ostatnia z najciekawszych metod klasowych Arrays
jest w stanie wyszukać zadaną wartość w tablicy. To nie jest zwykłe wyszukiwanie, ale tak zwane wyszukiwanie binarne . Jego istotą jest to:
- Tablica jest wstępnie posortowana
- Następnie środkowy element tablicy jest porównywany z pożądanym (z tym, którego szukamy).
- Jeśli wyszukiwanie jest większe niż średnia, wyszukiwanie jest kontynuowane w prawej połowie tablicy.
- Jeśli szukany element jest mniejszy niż średnia, wyszukiwanie jest kontynuowane w lewej połowie tablicy
Ze względu na to, że tablica jest posortowana, możliwe jest odrzucenie połowy tablicy w jednym porównaniu. Następnie w następnym kroku odrzuć kolejną połowę i tak dalej.
Takie podejście sprawia, że wyszukiwanie binarne jest bardzo szybkie. W tablicy składającej się z miliona (!) elementów może znaleźć indeks żądanego elementu w zaledwie 20 porównaniach. Wadą tego podejścia jest to, że tablica musi być najpierw posortowana, a sortowanie również wymaga czasu.
Oto jak wygląda jego połączenie:
int index = Arrays.binarySearch(Nazwa, oznaczający);
Gdzie Nazwa
jest nazwa tablicy, która ma zostać przekazana, już posortowana (na przykład za pomocą funkcji Arrays.sort()
). oznaczający
jest elementem szukanym w tablicy. Metoda zwraca wynik — indeks szukanego elementu w tablicy (numer komórki tablicy).
Przykłady:
|
x zawiera:
4 1 (również odpowiednie indeksy 0 i 2 )8 -7 |
Jeśli w tablicy jest kilka szukanych elementów, po prostu zwrócony zostanie numer jednego z nich (nie ma gwarancji, że będzie to np. pierwszy lub odwrotnie, ostatni z identycznych elementów).
Jeśli element nie zostanie znaleziony w tablicy, indeks będzie ujemny.
6. Link do dokumentacji klasy OracleArrays
Jeśli jesteś bardzo zainteresowany, Arrays
możesz przeczytać pełne informacje o klasie i wszystkich jej metodach w oficjalnej dokumentacji na stronie Oracle:
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Arrays.html
Możesz przeczytać na przykład o metodach Arrays.mismatch()
i plikach Arrays.compare()
. Może znajdziesz w nich coś przydatnego.
I nie daj się zwieść liczbie metod - tam każda metoda ma 5-10 kopii, które różnią się tylko rodzajem parametrów.
GO TO FULL VERSION