Seznamy

Datové typy a výjimky v Javě

Jim White

Java Developer

Rozhraní List

  • Rozhraní List, podrozhraní Collection
    • Definuje uspořádanou skupinu objektů
    • Může obsahovat duplicitní objekty
  • Několik implementací List
    • Všechny se chovají podobně
    • Implementace určuje, jak jsou objekty spravovány interně
Datové typy a výjimky v Javě

Implementace List

  • ArrayList – měnitelný, indexovaný (jako pole), uspořádaný seznam objektů

ArrayList jsou podobné polím v Javě s indexovanými prvky

  • LinkedList – objekty propojené odkazy na předchozí a následující objekt

LinkedList jsou seznamy objektů propojené ukazateli

  • Bez ohledu na implementaci se objekty přidávají, odebírají a mění stejně
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Datové typy a výjimky v Javě

ArrayList

  • Instanci vytvoříme pomocí new a generiky určíme typ obsahu
  • Přidání objektu na konec seznamu: .add(object)
  • Přístup k objektu: .get(index)
    • ArrayList používá index začínající od nuly
  • Nahrazení objektu: .set(index, object)
  • Odebrání objektu: .remove(index)
  • Vymazání všech objektů: .clear()
  • Počet objektů: .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();
Datové typy a výjimky v Javě

Objekty a primitivní typy

  • K přidání primitivního typu do objektu Collections Framework použijte wrappery
  • Přidané primitivní typy jsou „autoboxovány"
    • Autoboxing: automatické zabalení primitivního typu do wrapperu
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 is automatically wrapped by Integer then added
  • Autoboxing funguje se všemi objekty Collections Framework
Datové typy a výjimky v Javě

Heterogenní kolekce

  • Datové struktury Collections Framework mohou být heterogenní
    • Heterogenní = obsahují objekty různých typů
    • Jako parametrizovaný typ se používá Object
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
Datové typy a výjimky v Javě

Procházení seznamu

  • K procházení objektů List použijte syntaxi „for each"
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
Datové typy a výjimky v Javě

Výpis seznamu pomocí println

  • Obsah instance List (např. ArrayList) lze zobrazit 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]
Datové typy a výjimky v Javě

LinkedList

  • LinkedList se vytváří stejně jako instance ArrayList
  • LinkedList má stejné metody jako 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]
Datové typy a výjimky v Javě

Další metody LinkedList

  • Některé další metody
    • addFirst() přidá na začátek seznamu
    • addLast() přidá na konec seznamu
    • removeFirst() odebere ze začátku
    • removeLast() odebere z konce
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
Datové typy a výjimky v Javě

Podobnosti typů kolekcí

  • ArrayList a LinkedList vypadají stejně
    • Podobnosti budou i u dalších typů v Collections Framework
    • Je to záměr
  • Sdílejí rozhraní: List
    • Příklad polymorfismu („mnoho podob")
Datové typy a výjimky v Javě

ArrayList vs LinkedList

  • Operace na ArrayList a LinkedList (nebo jakémkoli List) jsou stejné
    • Výběr typu List závisí na použití
  • Vlastnosti ArrayList:
    • Rychlý náhodný přístup (např. list.get(11))
    • Pomalejší přidávání a odebírání prvků uprostřed
    • Objekty musí být fyzicky přesunuty při vkládání/odebírání

Přidávání objektů doprostřed ArrayList vyžaduje hodně přesunů

Datové typy a výjimky v Javě

ArrayList vs LinkedList

  • Vlastnosti LinkedList:
    • Pomalejší náhodný přístup (např. list.get(11))
    • Rychlejší přidávání a odebírání prvků uprostřed
    • Objekty se fyzicky nepřesouvají, mění se pouze několik referencí

Přidávání objektů doprostřed LinkedList vyžaduje jen změnu ukazatelů

Datové typy a výjimky v Javě

Let's practice!

Datové typy a výjimky v Javě

Preparing Video For Download...