Liste

Tipuri de date și excepții în Java

Jim White

Java Developer

Interfața List

  • Interfața List, sub-interfață a Collection
    • Definește un grup ordonat de obiecte
    • Poate conține obiecte duplicate
  • Mai multe implementări ale List
    • Toate au comportament similar
    • Implementarea determină cum sunt gestionate obiectele intern
Tipuri de date și excepții în Java

Implementări ale List

  • ArrayList - listă ordonată, indexată (similar cu array-urile), redimensionabilă

ArrayList sunt similare cu array-urile Java, cu elemente indexate

  • LinkedList - obiecte conectate prin legături la obiectele anterioare și următoare.

LinkedList sunt liste de obiecte conectate prin pointeri

  • Indiferent de implementare, adăugarea, eliminarea și modificarea obiectelor se fac la fel
1 Consultați https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html pentru tipuri și detalii despre List
Tipuri de date și excepții în Java

ArrayList

  • Construiți o instanță cu new și folosiți generics pentru a specifica tipul de conținut
  • Adăugați un obiect la sfârșitul listei cu .add(object)
  • Accesați un obiect cu .get(index)
    • ArrayList utilizează index de la zero
  • Înlocuiți/modificați un obiect cu .set(index, object)
  • Eliminați un obiect cu .remove(index)
  • Goliți lista cu .clear()
  • Numărul de obiecte cu .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();
Tipuri de date și excepții în Java

Obiecte și primitive

  • Utilizați wrapper-e pentru a adăuga un primitiv în orice obiect din Collections Framework
  • Primitivele adăugate sunt "autoboxed"
    • Autobox: procesul de împachetare automată a unui primitiv într-un wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 is automatically wrapped by Integer then added
  • Autoboxing funcționează cu toate obiectele din Collections Framework
Tipuri de date și excepții în Java

Colecții eterogene

  • Structurile de date din Collections Framework pot fi eterogene
    • Eterogen = conțin obiecte de tipuri diferite
    • Se utilizează Object ca tip parametrizat
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
Tipuri de date și excepții în Java

Parcurgerea unui List

  • Utilizați sintaxa "for each" pentru a parcurge obiectele dintr-un 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
Tipuri de date și excepții în Java

println pentru List

  • Conținutul unei instanțe List (ex.: ArrayList) poate fi afișat cu 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]
Tipuri de date și excepții în Java

LinkedList

  • LinkedList se construiesc similar cu instanțele ArrayList
  • LinkedList au aceleași metode ca 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]
Tipuri de date și excepții în Java

Metode suplimentare LinkedList

  • Metode suplimentare
    • addFirst() adaugă la începutul listei
    • addLast() adaugă la sfârșitul listei
    • removeFirst() elimină de la început
    • removeLast() elimină de la sfârșit
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
Tipuri de date și excepții în Java

Similarități între tipurile de colecții

  • ArrayList și LinkedList par similare
    • Alte tipuri din Collections Framework au de asemenea similarități
    • Acest lucru este intenționat
  • Partajează o interfață: List
    • Un exemplu de polimorfism ("multe forme")
Tipuri de date și excepții în Java

ArrayList vs LinkedList

  • Operațiile pe ArrayList și LinkedList (sau orice List) sunt identice
    • Alegerea tipului de List depinde de utilizare
  • Considerații pentru ArrayList:
    • Acces aleatoriu rapid (ex.: list.get(11))
    • Mai lent la adăugarea și eliminarea elementelor din mijloc
    • Deoarece obiectele trebuie mutate fizic la inserare/eliminare

Adăugarea obiectelor în mijlocul unui ArrayList necesită multe mutări

Tipuri de date și excepții în Java

ArrayList vs LinkedList

  • Considerații pentru LinkedList:
    • Acces aleatoriu mai lent (ex.: list.get(11))
    • Mai rapid la adăugarea și eliminarea elementelor din mijloc
    • Deoarece nu se mută obiecte fizic, ci se modifică câteva referințe

Adăugarea obiectelor în mijlocul unui LinkedList necesită doar modificarea unor pointeri

Tipuri de date și excepții în Java

Să exersăm!

Tipuri de date și excepții în Java

Preparing Video For Download...