Liste

Tipi di dati ed eccezioni in Java

Jim White

Java Developer

Interfaccia List

  • Interfaccia List, sotto-interfaccia di Collection
    • Definisce un gruppo di oggetti ordinato
    • Può contenere duplicati
  • Diverse implementazioni di List
    • Comportamento simile
    • L'implementazione determina come gli oggetti sono gestiti internamente
Tipi di dati ed eccezioni in Java

Implementazioni di List

  • ArrayList: lista ridimensionabile, indicizzata (come gli array), ordinata di oggetti

Le ArrayList sono simili agli array Java con elementi indicizzati

  • LinkedList: oggetti collegati da link agli oggetti precedente e successivo.

Le LinkedList sono liste di oggetti collegate da puntatori

  • Indipendentemente dall'implementazione, aggiungi, rimuovi, modifica gli oggetti allo stesso modo
1 Vedi https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html per tipi e dettagli di List
Tipi di dati ed eccezioni in Java

ArrayList

  • Crea un'istanza con new e usa i generics per il tipo di contenuto
  • Aggiungi un oggetto in coda con .add(object)
  • Accedi a un oggetto con .get(index)
    • ArrayList ha indice a partire da zero
  • Sostituisci/modifica un oggetto con .set(index, object)
  • Rimuovi un oggetto con .remove(index)
  • Svuota tutti gli oggetti con .clear()
  • Conta gli oggetti con .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Duplicati consentiti
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Rimuove il primo horse animals.remove(0); // Rimuove tutti gli oggetti animals.clear();
animals.size();
Tipi di dati ed eccezioni in Java

Oggetti e primitivi

  • Usa i wrapper per aggiungere un primitivo a qualsiasi oggetto del Collections Framework
  • I primitivi aggiunti sono "autoboxed"
    • Autobox: processo che inserisce automaticamente il primitivo nel wrapper
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 è automaticamente wrappato da Integer e poi aggiunto
  • L'autoboxing funziona con tutti gli oggetti del Collections Framework
Tipi di dati ed eccezioni in Java

Collezioni eterogenee

  • Le strutture dati del Collections Framework possono essere eterogenee
    • Eterogenee = contengono oggetti di tipi diversi
    • Usa Object come tipo parametrizzato
ArrayList<Object> list = new ArrayList<Object>(); // Accetta qualsiasi oggetto
list.add(new Integer(5)); // Aggiunge un Integer
list.add(6); // Aggiunge un Integer con autoboxing
list.add("Hello"); // Aggiunge una String
Tipi di dati ed eccezioni in Java

Iterare una List

  • Usa la sintassi "for each" per iterare gli oggetti di una List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each per scorrere tutta l'ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Tipi di dati ed eccezioni in Java

println su List

  • Il contenuto di un'istanza List (es. ArrayList) può essere mostrato con println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Mostra tutti gli elementi dell'ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Mostra tutti gli elementi dell'ArrayList
[horse, cow, chicken]
[5, Hello]
Tipi di dati ed eccezioni in Java

LinkedList

  • Le LinkedList si costruiscono come le ArrayList
  • Le LinkedList hanno gli stessi metodi delle ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Crea una nuova ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Aggiunge un oggetto alla lista
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Sostituisce un oggetto
System.out.println(cars); // Mostra la lista
cars.remove(0); // Rimuove un oggetto
cars.clear();  // Rimuove tutti gli oggetti
cars.size(); // Lunghezza della lista
[Ford, Toyota]
Tipi di dati ed eccezioni in Java

Metodi aggiuntivi di LinkedList

  • Alcuni metodi aggiuntivi
    • addFirst() aggiunge all'inizio
    • addLast() aggiunge alla fine
    • removeFirst() rimuove dall'inizio
    • removeLast() rimuove dalla fine
cars.addFirst("Fiat"); // Aggiunge all'inizio
cars.addLast("BMW"); // Aggiunge alla fine
cars.removeFirst(); // Rimuove il primo oggetto
cars.removeLast(); // Rimuove l'ultimo oggetto
Tipi di dati ed eccezioni in Java

Somiglianze tra tipi di Collection

  • ArrayList e LinkedList sembrano uguali
    • Altri tipi nel Collections Framework avranno somiglianze
    • È voluto
  • Condividono un'interfaccia: List
    • Esempio di polimorfismo ("più forme")
Tipi di dati ed eccezioni in Java

ArrayList vs LinkedList

  • Le operazioni su ArrayList e LinkedList (o qualsiasi List) sono le stesse
    • La scelta del tipo di List dipende dall'uso
  • Considerazioni su ArrayList:
    • Veloce nell'accesso casuale (es: list.get(11))
    • Più lenta ad aggiungere/rimuovere nel mezzo
    • Perché gli oggetti vanno spostati fisicamente durante inserimenti/rimozioni

Aggiungere nel mezzo di una ArrayList richiede molti spostamenti

Tipi di dati ed eccezioni in Java

ArrayList vs LinkedList

  • Considerazioni su LinkedList:
    • Più lenta nell'accesso casuale (es: list.get(11))
    • Più veloce ad aggiungere/rimuovere nel mezzo
    • Perché non si spostano oggetti, si cambiano solo alcuni riferimenti

Aggiungere nel mezzo di una LinkedList richiede solo cambiare alcuni puntatori

Tipi di dati ed eccezioni in Java

Ayo berlatih!

Tipi di dati ed eccezioni in Java

Preparing Video For Download...