Ultimo aggiornamento:  14 Febbraio 2024

 Stato del documento:   revisione in atto


team skill Visione d'insieme base advanced
PERCORSO AVANZATO
java collections

JAVA ⮊ COLLECTIONS

Conoscenza propedeutica

Pianificazione di un indicatore Funzioni Wrapper Class

Collezioni d'elementi

docs.oracle.com - Interface Iterable<T> docs.oracle.com - Interface Collection<E> docs.oracle.com - Interface List<E> docs.oracle.com - Interface Iterator<E> docs.oracle.com - Interface ListIterator<E>



✓   Interface Collection<E>

docs.oracle.com - The Collection Interface

  1. rappresentano un raggruppamento di elementi
  2. alcune Collection consentono di duplicare gli elementi, altre no
  3. alcune Collection sono ordinate e altre non ordinate
  4. JDK non fornisce alcuna implementazione diretta di questa interfaccia, ma la demanda alle sue sotto-interfacce estese:

    BeanContext, BeanContextServices, BlockingDeque<E>,
    BlockingQueue<E>, Deque<E>, EventSet,
    List<E>, NavigableSet<E>, Queue<E>,
    Set<E>, SortedSet<E>, TransferQueue<E>
  5. dovrebbero fornire due costruttori "standard":

    1. un costruttore void ( senza argomenti ), che crea una collezione vuota
    2. un costruttore con un singolo argomento di tipo Collection
  6. alcuni metodi sono specificati come opzionali. La loro implementazione deve lanciare un'eccezione UnsupportedOperationException
  7. alcune Collection hanno restrizioni sugli elementipossono vietare quelli null e limitarne il tipo
  8. un elemento non ammissibile lancia un'eccezione non controllata, tipicamente → NullPointerException o ClassCastException

  9. il metodo equals​(Object o) è un collo di bottiglia

    la specifica del metodo contains(Object o)restituisce true se e solo se la Collection contiene almeno un elemento tale che

    ( o==null ? e==null : o.equals(e) )
  10. operazioni di raccolta che eseguono un'attraversamento ricorsivo oppure Collection che contengono se stesse, possono originare un eccezione

    clone(), equals​(Object o), hashCode(), toString()
  11. non implementa l'interfaccia Serializable


✓   View Collections

  1. non memorizzano gli elementi, ma si affidano a una collezione di supporto per la memorizzazione

    1. Collections.checkedCollection ( vista → mutabile, con controllo sul tipo inserito )

      Collection<String> c = Collections.checkedCollection(new HashSet<>(), String.class);			
      			
    2. Collections.synchronizedCollection ( vista → mutabile, sincronizzata )

      Collection c = Collections.synchronizedCollection(myCollection);
      ...
      synchronized (c) {
      	Iterator i = c.iterator(); // selezione sui dati
      	while (i.hasNext())
      	foo(i.next());
      }				
      
    3. Collections.unmodifiableCollection ( vista → a sola lettura )
  2. possono fornire una rappresentazione diversa degli stessi elementi ( vista → mutabile, partizione )

    1. List<E> subList​(int fromIndex, int toIndex)
    2. NavigableSet<E> subSet​(E fromElement,boolean fromInclusive,E toElement, boolean toInclusive)
    3. Set<Map.Entry<K,​V>> entrySet()


✓   Interface List<E>

  1. possono accedere agli elementi nella struttura, tramite un indice ( posizione d'inserimento)
  2. consentono la duplicazione degli elementi
  3. ammettono uno o più elementi null
  4. se contengono se stesse, possono originare un eccezione
  5. un elemento non ammissibile lancia un'eccezione non controllata → NullPointerException o ClassCastException


✓   Interface List<E> ( a sola lettura )

  1. static <E> List<E> of​(E... elements)
  2. static <E> List<E> copyOf​(Collection<? extends E> coll)
  3. List<E> subList​(int fromIndex, int toIndex)

  4. le istanze create da questi metodi statici:

    1. sono immodificabili
    2. la chiamata a un metodo mutatore causa un'eccezioneUnsupportedOperationException
    3. non ammettono elementi null
    4. sono serializzabili se l'insieme degli elementi nella struttura lo sono
    5. l'ordine degli elementi è quello dell'interfaccia sorgente
    6. implementano l'interfaccia RandomAccess


✓   Interface Iterator<E>

  1. sostituiscono

    Interface Enumeration<E>

  2. consentono al chiamante di rimuovere elementi dall'insieme sottostante durante un'iterazione


✓   Interface ListIterator<E>

  1. estendono Iterator<E>
  2. consentono di attraversare una struttura in entrambe le direzioni
  3. consentono di modificare gli elementi durante un'iterazione
  4. consentono di ottenere la posizione corrente dell'iterazione nella struttura
  5. non hanno un'elemento corrente
  6. il cursore si trova sempre tra l'elemento restituito da una chiamata al metodo previous() e quello restituito da una chiamata al metodo next()

Elementi in ordine d'inserimento

✓   Scheletro implementato di una Collection<E>

docs.oracle.com - Class AbstractCollection<E> docs.oracle.com - Class AbstractList<E> docs.oracle.com - Class AbstractSequentialList<E>



✓   Class AbstractCollection<E>

  1. forniscono un'implementazione dell'interfaccia Collection<E>

  2. per implementare una struttura non modificabile:

    1. estendere AbstractCollection<E>
    2. implementare i metodi → abstract iterator(), Collection.size()
    3. gli Iterator<E> restituiti dal metodo iterator() devono implementare i metodi → Iteretor.hasNext(), Iteretor.next()
  3. per implementare una struttura modificabile:

    1. estendere AbstractCollection<E>
    2. sovrascrivere il metodo → add​(E e) che altrimenti lancerebbe un'eccezione UnsupportedOperationException
    3. gli Iterator<E> restituiti dal metodo iterator() devono implementare il metodo → default Iteretor.remove()
  4. per implementare una struttura fornire due costruttori "standard":

    1. un costruttore void ( senza argomenti ), che crea una collezione vuota
    2. un costruttore con un singolo argomento di tipo Collection<E>, di cui crea una copia


formazione java e piattaforma Galileo

Riferimenti

  1. Java documentazione

    bugs.java.com - Java Bug Database JDK 15 Documentation Version 15 API Specification Java Core Libraries Java Tutorials Learning Paths docs.oracle.com - Collections Framework overview docs.oracle.com - Outline of the Collections Framework docs.oracle.com - Trail: Collections

  2. Modulo → java.base : : Package → java.lang

    docs.oracle.com - Interface Iterable

  3. Modulo → java.base : : Package → java.util

    docs.oracle.com - Interface Collection docs.oracle.com - Interface List docs.oracle.com - Interface Iterator docs.oracle.com - Interface ListIterator docs.oracle.com - Class AbstractCollection docs.oracle.com - Class AbstractList& docs.oracle.com - Class AbstractSequentialList docs.oracle.com - Class Collections docs.oracle.com - Class ArrayList docs.oracle.com - Class Vector docs.oracle.com - Class LinkedList docs.oracle.com - Class Stack docs.oracle.com - Class PriorityQueue docs.oracle.com - Class ArrayDeque docs.oracle.com - Interface Set docs.oracle.com - Interface SortedSet docs.oracle.com - Interface NavigableSet docs.oracle.com - Class AbstractSet docs.oracle.com - Class EnumSet docs.oracle.com - Class HashSet docs.oracle.com - Class LinkedHashSet docs.oracle.com - Class TreeSet docs.oracle.com - Class HashMap docs.oracle.com - Class Hashtable docs.oracle.com - Class TreeMap

  4. Modulo → java.base : : Package → java.util.concurrent

    docs.oracle.com - Package java.util.concurrent docs.oracle.com - Interface BlockingQueue docs.oracle.com - Class CopyOnWriteArrayList docs.oracle.com - Class ArrayBlockingQueue docs.oracle.com - Class LinkedBlockingQueue docs.oracle.com - Class PriorityBlockingQueue docs.oracle.com - Class SynchronousQueue docs.oracle.com - Class ConcurrentLinkedQueue docs.oracle.com - Class DelayQueue docs.oracle.com - Class CopyOnWriteArraySet docs.oracle.com - Class ConcurrentSkipListSet.html

  5. Algoritmi

    Funzione di hash

  6. Tutorial e articoli

    cs.lmu.edu - Collections demo2s.com - Java Collections Introduction dzone.com - The Best of Java Collections [Tutorials] tutorialspoint.com - Java - Collections Framework java2s.com - Java Collection Tutorial javatpoint.com - Java Collection Tutorial howtodoinjava.com - Java Collection Tutorial tutorials.jenkov.com - Java Collection Tutorial baeldung.com - Java Collections Article geeksforgeeks.org - Collections in Java geeksforgeeks.org - ArrayDeque in Java geeksforgeeks.org - DelayQueue Class in Java geeksforgeeks.org - BlockingQueue Interface in Java geeksforgeeks.org - PriorityBlockingQueue Class in Java geeksforgeeks.org - ConcurrentLinkedQueue in Java geeksforgeeks.org - TreeSet in Java geeksforgeeks.org - Red-Black Tree examples.javacodegeeks.com - Java Collections Article tabnine.com - How to use List in java.util