Listy

Typy danych i wyjątki w Javie

Jim White

Java Developer

Interfejs List

  • Interfejs List, podinterfejs Collection
    • Definiuje uporządkowaną grupę obiektów
    • Może zawierać duplikaty
  • Kilka implementacji List
    • Wszystkie mają podobne zachowanie
    • Implementacja określa sposób zarządzania obiektami wewnętrznie
Typy danych i wyjątki w Javie

Implementacje List

  • ArrayList – zmienialny, indeksowany (jak tablice), uporządkowany zbiór obiektów

ArrayList jest podobna do tablic Java z indeksowanymi elementami

  • LinkedList – obiekty połączone łączami do następnego i poprzedniego obiektu.

LinkedList to listy obiektów połączone wskaźnikami

  • Niezależnie od implementacji, obiekty dodaje się, usuwa i zmienia w ten sam sposób
1 Zobacz https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html – typy i szczegóły List
Typy danych i wyjątki w Javie

ArrayList

  • Utwórz instancję za pomocą new i użyj generyków do określenia typu zawartości
  • Dodaj obiekt na końcu listy za pomocą .add(object)
  • Uzyskaj dostęp do obiektu za pomocą .get(index)
    • ArrayList używa indeksu od zera
  • Zastąp/zmień obiekt za pomocą .set(index, object)
  • Usuń obiekt za pomocą .remove(index)
  • Wyczyść listę za pomocą .clear()
  • Pobierz liczbę obiektów za pomocą .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicates allowed
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Removes the first horse animals.remove(0); // Removes all objects animals.clear();
animals.size();
Typy danych i wyjątki w Javie

Obiekty i typy proste

  • Użyj klas opakowujących, aby dodać typ prosty do obiektu Collections Framework
  • Dodane typy proste są „autoboxowane"
    • Autoboxing: automatyczne umieszczanie typu prostego w klasie opakowującej
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 is automatically wrapped by Integer then added
  • Autoboxing działa ze wszystkimi obiektami Collections Framework
Typy danych i wyjątki w Javie

Kolekcje heterogeniczne

  • Struktury danych Collections Framework mogą być heterogeniczne
    • Heterogeniczne = przechowują obiekty różnych typów
    • Użyj Object jako typu parametryzowanego
ArrayList<Object> list = new ArrayList<Object>(); // Allow any object
list.add(new Integer(5)); // Add an Integer
list.add(6); // Add an Integer using autoboxing
list.add("Hello"); // Add a String
Typy danych i wyjątki w Javie

Iterowanie po liście

  • Użyj składni „for each", aby iterować po obiektach List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // fore-each to loop through all in the ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Typy danych i wyjątki w Javie

List i println

  • Zawartość instancji List (np. ArrayList) można wyświetlić za pomocą println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Display all the elements in the ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Display all the elements in the ArrayList
[horse, cow, chicken]
[5, Hello]
Typy danych i wyjątki w Javie

LinkedList

  • LinkedList tworzy się podobnie jak instancje ArrayList
  • LinkedList posiada te same metody co ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Create a new ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Add an object to the list
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Replace an object
System.out.println(cars); // Display the list
cars.remove(0); // Remove an object
cars.clear();  // Remove all objects
cars.size(); // Get the list length
[Ford, Toyota]
Typy danych i wyjątki w Javie

Dodatkowe metody LinkedList

  • Dodatkowe metody
    • addFirst() dodaje na początku listy
    • addLast() dodaje na końcu listy
    • removeFirst() usuwa z początku
    • removeLast() usuwa z końca
cars.addFirst("Fiat"); // Add to the beginning
cars.addLast("BMW"); // Add the the end
cars.removeFirst(); // Remove the first object
cars.removeLast(); // Remove the last object
Typy danych i wyjątki w Javie

Podobieństwa typów kolekcji

  • ArrayList i LinkedList wyglądają podobnie
    • Inne typy w Collections Framework również mają podobieństwa
    • Jest to zamierzone
  • Łączy je wspólny interfejs: List
    • Przykład polimorfizmu ("wiele form")
Typy danych i wyjątki w Javie

ArrayList vs LinkedList

  • Operacje na ArrayList i LinkedList (lub dowolnej List) są takie same
    • Wybór typu List zależy od zastosowania
  • Cechy ArrayList:
    • Szybki dostęp swobodny (np. list.get(11))
    • Wolniejsze dodawanie i usuwanie elementów w środku
    • Ponieważ obiekty muszą być fizycznie przesuwane przy wstawianiu/usuwaniu

Dodawanie obiektów w środku ArrayList wymaga wielu przesunięć

Typy danych i wyjątki w Javie

ArrayList vs LinkedList

  • Cechy LinkedList:
    • Wolniejszy dostęp swobodny (np. list.get(11))
    • Szybsze dodawanie i usuwanie elementów w środku
    • Ponieważ obiekty nie są fizycznie przesuwane – zmieniane są tylko referencje

Dodawanie obiektów w środku LinkedList wymaga jedynie zmiany kilku wskaźników

Typy danych i wyjątki w Javie

Czas na ćwiczenia!

Typy danych i wyjątki w Javie

Preparing Video For Download...