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:
- ♾️ Nauczycie się tworzyć nieskończone tablice
- 📖 A potem prowadzić „osobisty słownik”
- 💾 Następnie krótko zapoznam was z pracą z plikami
- 🌐 Potem nauczymy się pobierać obrazki z internetu
- 🛰️ 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.
GO TO FULL VERSION