CodeGym /Kursy /JAVA 25 SELF /„Nieskończona tablica” — ArrayList<T>

„Nieskończona tablica” — ArrayList<T>

JAVA 25 SELF
Poziom 12, Lekcja 1
Dostępny

1. Wprowadzenie

To pierwszy wykład poziomu bonusowego. Jesteśmy już bardzo blisko nauki OOP. Chcę rozbudzić waszą ciekawość i trochę wyprzedzić wydarzenia 😈. Na tym poziomie opowiem wam o 5 ciekawych rzeczach:

  1. ♾️ Nauczycie się tworzyć nieskończone tablice
  2. 📖 A potem prowadzić „osobisty słownik”
  3. 💾 Następnie krótko zapoznam was z pracą z plikami
  4. 🌐 Potem nauczymy się pobierać obrazki z internetu
  5. 🛰️ A na ostatnim wykładzie poziomu będziecie śledzić stację kosmiczną ISS w czasie rzeczywistym

Jak to wszystko działa pod maską, poznacie na kolejnych poziomach, a dziś po prostu nauczycie się korzystać z narzędzi, które wam udostępnię. Zaintrygowani? To zaczynamy 😇.

Przypomnijmy zwykłe tablice

Przypomnijmy zwykłą tablicę w Javie:

int[] arr = new int[10];

Świetna rzecz, ale ma kilka ograniczeń: rozmiar jest stały, nie można dodać ani usunąć elementu bez tworzenia nowej tablicy. A czasem chcemy tablicę, która rośnie i kurczy się w razie potrzeby. I mamy na to świetne rozwiązanie — dynamiczną tablicę ArrayList!

ArrayList to „sprytna tablica”, która może automatycznie rosnąć i się zmniejszać. W przeciwieństwie do zwykłej tablicy o stałym rozmiarze, ArrayList sam dba o to, by było w nim dość miejsca na nowe elementy.

Tworzymy nieskończoną tablicę

Aby utworzyć nasz ArrayList, należy napisać kod w stylu:

ArrayList<String> array = new ArrayList<String>()

Po tym możemy dodawać do niego elementy:

array.add("Masza");
array.add("Kasia");

Tworzymy dynamiczną tablicę dla liczb całkowitych

Jak zapewne się domyślacie, typ elementów naszej dynamicznej tablicy należy podać w nawiasach trójkątnych. Można tam wskazać dowolny typ poza typami prostymi. Typy proste trzeba zastąpić ich odpowiednikami opakowującymi (wrapperami).

Przykład:

ArrayList<Integer> numbers = new ArrayList<Integer>();      // int
ArrayList<Double> fees = new ArrayList<Double>();            // double
ArrayList<Boolean> yesList = new ArrayList<Boolean>();       // boolean
ArrayList<Character> chars = new ArrayList<Character>();     // char

Nasz ArrayList nie obsługuje [index] do dostępu do elementów, ale ma specjalne metody, które pokrywają wszystkie wasze potrzeby. Przejdźmy przez te najciekawsze.

2. Metoda add(element) — dodawanie elementu

Pierwsze, co robimy z listą, to dodajemy do niej dane. Służy do tego metoda add. Umieszcza ona element na końcu listy.

ArrayList<String> todo = new ArrayList<>(); // lista zadań
todo.add("Nauczyć się ArrayList");
todo.add("Zrobić herbatę");
todo.add("Pójść na spacer");

Po tych trzech liniach mamy listę trzech napisów. W przeciwieństwie do tablicy, nie musimy z góry podawać rozmiaru — rośnie on sam wraz z dodawaniem.

Bardzo wygodne: można zacząć od pustej listy i stopniowo ją wypełniać w zależności od działań użytkownika lub danych wejściowych programu.

3. Metoda get(index) — dostęp przez indeks

Każdy element listy ma swój numer porządkowy — indeks. Indeksowanie zawsze zaczyna się od zera. To znaczy pierwszy element ma numer 0, drugi 1 i tak dalej.

Jeśli chcemy pobrać element po numerze, używamy metody get.

String task = todo.get(1);
System.out.println("Drugie zadanie: " + task);

Wynik:

Drugie zadanie: Zrobić herbatę

Ważne: jeśli odwołamy się do indeksu, którego nie ma (na przykład todo.get(10) przy liście z trzech elementów), program zgłosi błąd IndexOutOfBoundsException. Dlatego zawsze trzeba albo być pewnym indeksu, albo sprawdzać rozmiar listy metodą size().

4. Metoda set(index, element) — zamiana elementu

Zdarza się, że element na liście trzeba zamienić. W takim przypadku nie trzeba go usuwać i dodawać ponownie — wystarczy użyć metody set.

todo.set(1, "Zaparzyć kawę"); 
System.out.println("Teraz drugie zadanie: " + todo.get(1));

Wynik:

Teraz drugie zadanie: Zaparzyć kawę

W ten sposób set to sposób na aktualizację listy „w locie”.

5. Metoda remove(index) — usuwanie elementu

Usunąć element z ArrayList można po indeksie.

todo.remove(0); 
System.out.println("Pierwsze zadanie teraz: " + todo.get(0));

Wynik:

Pierwsze zadanie teraz: Zaparzyć kawę

Usunęliśmy pierwszy element (indeks 0). I teraz drugi stał się pierwszym, a drugim elementem stał się ten, który wcześniej był trzecim. Ważny moment: po usunięciu elementy listy przesuwają się.

Bywa to zaskoczeniem dla początkujących. Zawsze pamiętajcie, że po usunięciu indeksy są przeliczane.

6. Metoda size() — sprawdzanie rozmiaru listy

Metoda size zwraca liczbę elementów na liście. To podobne do właściwości length w tablicach, ale w ArrayList — to metoda.

System.out.println("Łącznie zadań: " + todo.size());

Wynik:

Łącznie zadań: 2

Często size wykorzystuje się w pętlach, aby przejść przez wszystkie elementy:

for (int i = 0; i < todo.size(); i++) 
{
    System.out.println(todo.get(i));
}

7. Metoda contains(element) — sprawdzenie obecności

Aby dowiedzieć się, czy na liście jest potrzebny element, można skorzystać z contains. Ta metoda zwraca true lub false.

System.out.println(todo.contains("Pójść na spacer"));
System.out.println(todo.contains("Zrobić herbatę"));

Wynik:

true
false

Bardzo przydatna metoda, gdy chcecie uniknąć duplikatów lub sprawdzić warunek „czy taki element jest na liście”.

8. Iterowanie po elementach

Są dwa sposoby przejścia po liście.

Pętla indeksowa

Ta metoda jest potrzebna, gdy ważny jest numer elementu.

for (int i = 0; i < todo.size(); i++) 
{
    System.out.println(i + ": " + todo.get(i));
}

Pętla for-each

A jeśli numer nie jest potrzebny, a po prostu chcecie przejrzeć wszystkie elementy — użyjcie pętli for-each.

for (String task : todo) 
{
    System.out.println("Zadanie: " + task);
}

Taka pętla jest krótsza i czytelniejsza.

9. Praktyka: ArrayList w waszej aplikacji

Zróbmy listę zadań, którą można uzupełniać i wyświetlać:

import java.util.ArrayList;
import java.util.Scanner;

public class TodoApp 
{
    public static void main(String[] args) 
    {
        ArrayList<String> todo = new ArrayList<>();
        Scanner console = new Scanner(System.in);

        while (true) 
        {
            System.out.print("Wpisz zadanie (lub pusty wiersz, aby zakończyć): ");
            String task = console.nextLine();
            if (task.isEmpty()) break;
            todo.add(task);
        }

        System.out.println("Wasza lista zadań:");
        for (int i = 0; i < todo.size(); i++) 
        {
            System.out.println((i + 1) + ". " + todo.get(i));
        }
    }
}

Mam nadzieję, że spodobała wam się nasza „nieskończona” tablica. To pierwsza z kolekcji Javy, z którą się zapoznaliście. Myślę, że pozostałe również przypadną wam do gustu.

1
Zadanie
JAVA 25 SELF, poziom 12, lekcja 1
Niedostępne
Dodawanie i pobieranie elementu
Dodawanie i pobieranie elementu
1
Zadanie
JAVA 25 SELF, poziom 12, lekcja 1
Niedostępne
Zamiana i usuwanie elementów
Zamiana i usuwanie elementów
1
Zadanie
JAVA 25 SELF, poziom 12, lekcja 1
Niedostępne
Sprawdzenie obecności elementu na liście
Sprawdzenie obecności elementu na liście
1
Zadanie
JAVA 25 SELF, poziom 12, lekcja 1
Niedostępne
Lista zadań z wprowadzaniem przez użytkownika
Lista zadań z wprowadzaniem przez użytkownika
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION