CodeGym /Kursy /JAVA 25 SELF /Klasa Arrays: sort, fill, copyOf, equals

Klasa Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Poziom 7, Lekcja 5
Dostępny

1. Wprowadzenie

Tablice w Javie — potężne narzędzie, ale podstawowa składnia szybko zamienia się w rutynę. Z pomocą przychodzi klasa java.util.Arrays — zestaw metod statycznych do pracy z tablicami: sortowanie, kopiowanie, porównywanie, formatowane wypisywanie i nie tylko. Nie trzeba tworzyć instancji — wszystkie metody są statyczne i wywołuje się je przez nazwę klasy.

Aby używać metod, dodaj import na początku pliku:

import java.util.Arrays;

Jeśli zapomnisz o imporcie, kompilator zgłosi, że Arrays „nie znaleziono” — to nie bug, lecz oczekiwane zachowanie bez importu.

2. Sortowanie tablicy: Arrays.sort

Jak działa Arrays.sort

Składnia


Arrays.sort(array);
Arrays.sort(array, startIndex, endIndex);
Sortowanie całej tablicy lub podzakresu

Metoda sortuje „w miejscu” — zmienia tablicę źródłową i nie zwraca nowej. Chcesz zachować oryginalną kolejność? Najpierw skopiuj tablicę.

Przykład: sortowanie tablicy liczb całkowitych

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Sortujemy rosnąco

System.out.println("Posortowana tablica: " + Arrays.toString(scores));
// Wyświetli: [1, 2, 5, 7, 9]

Przykład: sortowanie tablicy łańcuchów

String[] names = {"Vasya", "Petya", "Anya", "Igor"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Anya, Igor, Petya, Vasya]

Ważne: łańcuchy sortowane są leksykograficznie (alfabetycznie), liczby — rosnąco.

Sortowanie części tablicy

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // sortuje elementy o indeksach 1..3 (4 jest wyłączone)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Uwagi

  • Sortowanie „w miejscu”: zmienia się tablica źródłowa.
  • Liczby — rosnąco, łańcuchy — alfabetycznie.
  • Dla złożonych obiektów użyj przeciążeń z komparatorem.

3. Wypełnianie tablicy: Arrays.fill

Składnia


Arrays.fill(array, value);
Arrays.fill(array, startIndex, endIndex, value);
Wypełnianie całej tablicy lub zakresu jedną wartością

Metoda wypełnia wszystkie elementy lub wskazaną część tablicy tą samą wartością.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Wszystkie elementy teraz równe 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Wypełnianie części tablicy

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // wypełni elementy o indeksach 2..4 (5 jest wyłączone)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Wypełnianie tablicy łańcuchów

String[] guests = new String[4];
Arrays.fill(guests, "Pusto");
System.out.println(Arrays.toString(guests)); // [Pusto, Pusto, Pusto, Pusto]

4. Kopiowanie tablicy: Arrays.copyOf i Arrays.copyOfRange

Arrays.copyOf

Składnia


Arrays.copyOf(originalArray, newLength);
Utworzenie nowej kopii o zadanej długości

Tworzy nową tablicę i kopiuje elementy z tablicy źródłowej. Jeśli nowa długość jest większa od źródłowej, „ogon” zostanie wypełniony wartościami domyślnymi (0 dla int, null dla referencji).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Skracanie tablicy

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Składnia


Arrays.copyOfRange(originalArray, startIndex, endIndex);
Kopiowanie podtablicy do nowej tablicy
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Skopiuje elementy o indeksach 1..3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. Porównywanie tablic: Arrays.equals i Arrays.deepEquals

W Javie nie można porównywać tablic przez == — tak porównuje się referencje, a nie zawartość:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

Jak porównywać zawartość?


Arrays.equals(array1, array2);
Arrays.deepEquals(matrix1, matrix2);
Płytkie i głębokie porównanie
System.out.println(Arrays.equals(a, b)); // true

Dla tablic jednowymiarowych używaj Arrays.equals, dla dwuwymiarowych i głębszych — Arrays.deepEquals.

Przykład: porównanie tablic dwuwymiarowych

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. Ładne wypisywanie tablicy: Arrays.toString i Arrays.deepToString

Bezpośrednie wypisanie tablicy da nieczytelny ciąg:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Składnia


Arrays.toString(array);
Arrays.deepToString(matrix);
Sformatowane wypisywanie tablic 1D i wielowymiarowych
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Typowe błędy podczas pracy z klasą Arrays

Błąd nr 1: próba porównania tablic przez ==
Tablice to obiekty, a == porównuje jedynie referencje. Nawet przy identycznych wartościach wynik będzie false. Używaj Arrays.equals (dla jednowymiarowych) lub Arrays.deepEquals (dla wielowymiarowych).

Błąd nr 2: zapomnienie, że sortowanie zmienia tablicę „w miejscu”
Jeśli potrzebujesz oryginalnej kolejności, najpierw zrób kopię metodą Arrays.copyOf, a dopiero potem sortuj kopię. W przeciwnym razie oryginał straci swój porządek.

Błąd nr 3: błędne rozumienie granic w Arrays.fill i Arrays.copyOfRange
Metody używają półotwartego zakresu: prawy indeks jest wyłączony. Na przykład, Arrays.fill(arr, 2, 5, 9) wypełni indeksy 2, 3, 4, a element o indeksie 5 pozostawi bez zmian.

Błąd nr 4: próba bezpośredniego wypisania tablicy
Wywołanie System.out.println(arr) drukuje techniczną reprezentację. Używaj Arrays.toString dla tablic jednowymiarowych i Arrays.deepToString dla wielowymiarowych.

Błąd nr 5: porównywanie tablic wielowymiarowych przez Arrays.equals
Metoda porównuje tylko najwyższy poziom (referencje do wewnętrznych tablic). Do porównania zawartości użyj Arrays.deepEquals.

1
Zadanie
JAVA 25 SELF, poziom 7, lekcja 5
Niedostępne
Sortowanie wyników biegu 🏃‍♂️
Sortowanie wyników biegu 🏃‍♂️
1
Zadanie
JAVA 25 SELF, poziom 7, lekcja 5
Niedostępne
Inicjalizacja pustych komórek magazynowych 📦
Inicjalizacja pustych komórek magazynowych 📦
1
Zadanie
JAVA 25 SELF, poziom 7, lekcja 5
Niedostępne
Wyodrębnianie środkowych odczytów ze stacji pogodowej ☀️
Wyodrębnianie środkowych odczytów ze stacji pogodowej ☀️
1
Zadanie
JAVA 25 SELF, poziom 7, lekcja 5
Niedostępne
Weryfikacja tajnych kodów dostępu 🔐
Weryfikacja tajnych kodów dostępu 🔐
1
Ankieta/quiz
Tablice, poziom 7, lekcja 5
Niedostępny
Tablice
Zapoznanie z tablicami
Komentarze (1)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Agnieszka Poziom 27, Poland, Poland
7 stycznia 2026
Please, translate parameters in sort method in point 2 to Arrays.sort(array, fromIndex, toIndex)