Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 2 z 28/14 w kursie~15 min
Lekcje modułu (2/2)

Kolekcje i ArrayList

Tradycyjne tablice w Javie mają stały rozmiar określany w momencie ich tworzenia. Do pracy z listami danych, których rozmiar może się dynamicznie zmieniać, Java dostarcza Framework Kolekcji (Java Collections Framework). Najczęściej używaną klasą jest ArrayList.

Klasa ArrayList i typy generyczne (Generics)

ArrayList implementuje tablicę o zmiennym rozmiarze w pamięci. Aby zadeklarować ArrayList, musimy określić typ elementów, które będzie zawierać, umieszczając go w nawiasach ostrokątnych < >. Ta funkcjonalność nazywa się typami generycznymi (Generics).

Aby użyć ArrayList, musimy zaimportować ją na początku pliku z java.util.ArrayList.

Deklaracja i tworzenie instancji:

Code
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Główne metody

Oto podstawowe operacje na ArrayList:

  1. add(element): Dodaje element na koniec listy.
  2. get(indeks): Zwraca element o określonym indeksie (indeksowanie od 0).
  3. size(): Zwraca liczbę elementów aktualnie znajdujących się na liście.
  4. remove(indeks): Usuwa element o wskazanym indeksie.
Code
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Stampa 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Stampa "Pane"

Przechodzenie po liście (For-Each)

Pętla for-each jest idealną strukturą do przechodzenia przez wszystkie elementy kolekcji:

Code
for (String item : shoppingList) {
    System.out.println(item);
}

Tablica vs ArrayList: pamięć i wydajność

Choć ArrayList jest znacznie bardziej elastyczna niż tablica statyczna, wiąże się z kosztami pod względem wydajności i pamięci:

  • Tablica statyczna: Jest alokowana w ciągłym bloku pamięci, ma stałe wymiary, a dostęp do elementów poprzez indeks jest niezwykle szybki. Przechowuje bezpośrednio typy prymitywne bez dodatkowych kosztów (overhead).
  • ArrayList: Wewnętrznie zarządza tablicą, której rozmiar jest zmieniany (poprzez utworzenie nowej, większej tablicy i skopiowanie starych elementów), gdy przekroczona zostanie jej początkowa pojemność (zwykle 10). Ponadto zawiera tylko referencje do obiektów, co wprowadza narzut pamięciowy dla każdego elementu.

Autoboxing i Unboxing

Ponieważ ArrayList może przechowywać tylko obiekty, Java automatycznie wykonuje konwersję między typami prymitywnymi a ich odpowiednimi klasami opakowującymi:

  • Autoboxing: Automatyczna konwersja z typu prymitywnego na klasę opakowującą. Na przykład, gdy piszesz numbers.add(42), Java automatycznie konwertuje 42 (int) na Integer.valueOf(42) (Integer).
  • Unboxing: Automatyczna konwersja z klasy opakowującej na typ prymitywny. Na przykład, gdy wykonujesz int num = numbers.get(0), Java wewnętrznie wykonuje konwersję z Integer na int.

Spróbuj sam

Ćwiczenie#java.m4.l2.e1
Próby: 0Ładowanie...

Zaimportuj ArrayList, zadeklaruj ArrayList obiektów String o nazwie names. Dodaj do listy Alice i Bob, a następnie wypisz jej rozmiar za pomocą metody size().

Ładowanie edytora...
Pokaż wskazówkę

Umieść `import java.util.ArrayList;` na samej górze. Utwórz listę za pomocą `ArrayList<String> names = new ArrayList<>();`, dodaj elementy i wypisz jej rozmiar za pomocą `names.size()`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#java.m4.l2.e2
Próby: 0Ładowanie...

Zadeklaruj ArrayList obiektów Integer o nazwie numbers, dodaj liczbę 42 i wypisz ją, pobierając ją za pomocą indeksu 0 metodą get().

Ładowanie edytora...
Pokaż wskazówkę

Użyj `ArrayList<Integer> numbers = new ArrayList<>();` (z klasą opakowującą Integer) i wypisz ją za pomocą `System.out.println(numbers.get(0));`.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#java.m4.l2.e3
Próby: 0Ładowanie...

Zadeklaruj ArrayList obiektów String o nazwie colors. Dodaj do listy kolory Red, Green i Blue. Na koniec użyj pętli for-each, aby przejść po liście i wypisać każdy kolor na ekranie.

Ładowanie edytora...
Pokaż wskazówkę

Zadeklaruj listę za pomocą `ArrayList<String> colors = new ArrayList<>();`, dodaj trzy kolory i użyj pętli `for (String c : colors)`, aby wypisać je za pomocą `System.out.println(c);`.

Rozwiązanie dostępne po 3 próbach