Collezioni fondamentali

  • ArrayList
  • LinkedList
    • Estendono entrambe AbstractList
  • HashSet
  • TreeSet
    • Estendono entrambe AbstractSet
  • LinkedHashSet
    • Estende HashSet
  • HashMap
  • TreeMap
    • Estendono AbstractMap
  • LinkedHashMap
    • Estende HashMap

ArrayList e LinkedList

  • Basate su List, una sottointerfaccia di Collection e di Iterable

ArrayList

  • Implementa la lista mediante un array
    • CapacitĂ  iniziale: 10 elementi

LinkedList

  • Implementa la lista mediante elementi linkati

Iterare sulle liste in entrambe le direzioni

  • listIterator() restituisce un iteratore bidirezionale (Interfaccia ListIterator che estende Iterator) per la lista
ListIterator <Integer> i = l.listIterator();
while (i.hasNext())
	System.out.println(i.next());
  • Da destra verso sinistra (se si specifica un intero, si parte da quella posizione: es. list.listIterator(list.size()))
ListIterator <Integer> i = l.listIterator(l.size());
while (i.hashPrevious())
	System.out.println(i.previous());

Insiemi HashSet, TreeSet e LinkedHashSet

  • Basati su Set, una sottointerfaccia di Collection e di Iterable
  • Gli insiemi sono Collection che contengono elementi tutti distinti
  • Le classi insiemi, HashSet, TreeSet e LinkedHashSet, estendono AbstractSet e implementano l’interfaccia Set
  • HashSet memorizza gli elementi in una tabella di hash
  • TreeSet memorizza gli elementi in un albero mantenendo un ordine sugli elementi
  • LinkedHashSet memorizza gli elementi in ordine di inserimento

Come funziona un HashSet?

Mappe

  • Una mappa mette in corrispondenza chiavi e valori
  • Non può contenere chiavi duplicate
  • java.util.Map è un’interfaccia implementata da HashMap, TreeMap e LinkedMap

Chiavi e valori di una mappa

  • E’ possibile ottenere l’insieme delle chiavi di una mappa mediante il metodo keySet
  • L’elenco dei valori mediante il metodo values
  • L’insieme delle coppie (chiave, valore) mediante il metodo entrySet
    • Restituisce un insieme di oggetti di tipo Map.Entry<K, V>
    • Per ogni oggetto (ovvero la coppia) è possibile conoscere le chiave (getKey()) e ill valore (getValue())

Alcuni metodi Java 8 e Java 9 nell’interfaccia java.util.Map

forEach (BiConsumer)

  • Itera su ciascuna coppia (chiave valore)

getOrDefault (chiave, valoreDefault)

  • Restituisce il valore associato alla chiave o valoreDefault se la chiave non è presente

merge (chiave, valore, BiFunction)

  • Se la chiave non contiene giĂ  un valore, imposta il valore specificato, altrimenti chiama una bifunzione che decide come mettere insieme il valore precedente con il valore passato in input

of (chiave, valore, chiave, valore,…, chiave, valore)

  • statico, crea una mappa immutabile dei tipi e con i valori corrispondenti

Riferimenti a metodi esistenti

  • E’ possibile passare riferimenti a metodi esistenti
  • Utilizzando la sintassi
    • Classe::metodoStatico
    • riferimentoOggetto::metodoNonStatico
    • Classe::metodoStatico