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.

W starej dobrej tradycji języka Java ostatni element nie należy do zakresu.

Przykład:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


Wypełnij komórki x[3], x[4], x[5], x[6]wartościami 999. Numerowanie komórek tablicy od zera!

Zmienna strzawiera wartość:
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

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:

int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


Zmienna str2zawiera wartość:
"[1, 2, 3, 4, 5]"

Zmienna str3zawiera wartość:
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

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.

W starej dobrej tradycji języka Java ostatni element nie należy do zakresu.

Przykład:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


Zmienna str2zawiera wartość:
"[16, 17, 18, 19, 20]"

Zmienna str3zawiera wartość:
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


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 Arraysuwzględnili sort(). Oto jak wygląda jego połączenie:

Arrays.sort(Nazwa);

Ta metoda sortuje przekazaną tablicę w porządku rosnącym.

Przykład:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



Zmienna strzawiera wartość:
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

Ś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.

W starej dobrej tradycji języka Java ostatni element nie należy do zakresu.

Przykład:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


Zmienna strzawiera wartość:
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

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 Arraysjest 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 Nazwajest nazwa tablicy, która ma zostać przekazana, już posortowana (na przykład za pomocą funkcji Arrays.sort()). oznaczającyjest elementem szukanym w tablicy. Metoda zwraca wynik — indeks szukanego elementu w tablicy (numer komórki tablicy).

Przykłady:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xzawiera:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(również odpowiednie indeksy 0i 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, Arraysmoż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.