Inicjowanie tablic w Javie

1. Przegląd

W tym krótkim samouczku zobaczymy różne sposoby inicjalizacji tablicy i subtelne różnice między nimi.

2. Jeden element na raz

Zacznijmy od prostej metody opartej na pętli:

for (int i = 0; i < array.length; i++) { array[i] = i + 2; }

Zobaczmy także, jak możemy zainicjować wielowymiarową tablicę po jednym elemencie na raz:

for (int i = 0; i < 2; i++) { for (int j = 0; j < 5; j++) { array[i][j] = j + 1; } }

3. W chwili złożenia deklaracji

Teraz zainicjujmy tablicę w momencie deklaracji:

String array[] = new String[] { "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" };

Podczas tworzenia instancji tablicy nie musimy określać jej typu:

int array[] = { 1, 2, 3, 4, 5 };

Zauważ, że nie jest możliwe zainicjowanie tablicy po deklaracji przy użyciu tego podejścia. Taka próba spowoduje błąd kompilacji.

4. Korzystanie z Arrays.fill ()

Java.util.Arrays klasa ma kilka metod nazwanych Fill () , które akceptują różne typy argumentów i napełni całą tablicę z tej samej wartości:

long array[] = new long[5]; Arrays.fill(array, 30);

Metoda ma również kilka alternatyw, które ustawiają zakres tablicy na określoną wartość:

int array[] = new int[5]; Arrays.fill(array, 0, 3, -50);

Zauważ, że metoda akceptuje tablicę, indeks pierwszego elementu, liczbę elementów i wartość.

5. Korzystanie z Arrays.copyOf ()

Metoda Arrays.copyOf () tworzy nową tablicę, kopiując inną tablicę. Metoda ma wiele przeciążeń, które akceptują różne typy argumentów.

Zobaczmy szybki przykład:

int array[] = { 1, 2, 3, 4, 5 }; int[] copy = Arrays.copyOf(array, 5);

Kilka uwag:

  • Metoda akceptuje tablicę źródłową i długość tworzonej kopii
  • Jeśli długość jest większa niż długość tablicy do skopiowania, dodatkowe elementy zostaną zainicjowane przy użyciu ich wartości domyślnych
  • Jeśli tablica źródłowy nie został zainicjowany, a następnie NullPointerException zostaje wrzucony
  • Jeśli długość tablicy źródłowej jest ujemna, zostanie zgłoszony wyjątek NegativeArraySizeException

6. Korzystanie z Arrays.setAll ()

Metoda Arrays.setAll () ustawia wszystkie elementy tablicy za pomocą funkcji generatora:

int[] array = new int[20]; Arrays.setAll(array, p -> p > 9 ? 0 : p); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Jeśli funkcja generatora ma wartość null, zostanie zgłoszony wyjątek NullPointerException .

7. Korzystanie z ArrayUtils.clone ()

Na koniec wykorzystajmy ArrayUtils.clone () API z Apache Commons Lang 3 - które inicjuje tablicę, tworząc bezpośrednią kopię innej tablicy:

char[] array = new char[] {'a', 'b', 'c'}; char[] copy = ArrayUtils.clone(array);

Należy zauważyć, że ta metoda jest przeciążona dla wszystkich typów pierwotnych.

8. Wniosek

W tym artykule omówiliśmy różne sposoby inicjowania tablic w Javie.

Jak zawsze, pełna wersja kodu jest dostępna na GitHub.