Preparare la certificazione Java Programmer OCPJP7: collections

COLLECTIONS

  • Iterator è un’interfaccia che prevede 3 metodi:
    • Boolean hasNext()
    • E next()
    • void remove()
  • prima di invocare il metodo remove() DEVE essere invocato il metodo next() per posizionarsi sull’elemento, altrimenti si ottiene una IllegalStateException
  • Quando in un ArrayList si aggiungono o rimuovono degli elementi, tutti gli altri elementi vengono copiati, per cui questi tipi di operazioni sono piuttosto costosi.
  • ListIterator è un’interfaccia che estende Iterator e permette di scorrere una lista in entrambe le direzioni.
  • L’interfaccia Map NON estende l’interfaccia Collection.
  • La classe concreta TreeMap utilizza internamente una struttura red-black tree.
  • Il metodo da utilizzare per inserire elementi in una HashMap è put.
  • keySet() è il metodo che ritorna un Set contenente tutte le chiavi inserite in una HashMap
  • valueSet() è il metodo che ritorna un Set contenente tutti i valori inseriti in una HashMap
  • Il metodo hashCode() dovrebbe restituire lo stesso codice hash per 2 oggetti se per questi 2 oggetti il metodo equals() restituisce true.
  • Deque è una Doubly-Ended queue
  • Comparable è un’interfaccia che ha un unico metodo:
    • int compareTo(Element E)
  • Il metodo binarySearch() della classe Arrays deve essere invocato su un array ordinato per cui, se l’array non lo è, occorre invocare il metodo sort() prima di effettuare la binarySearch.
  • NON si possono aggiungere elementi ad una lista ritornata dal metodo asList().
  • E’ però possibile modificare i valori già presenti nella lista e tali modifiche sono propagate all’array originale su cui il metodo asList() è stato invocato.
  • Esempio con List:
  • List l = new ArrayList<>();
    l.add(10);
    l.add(20);
    l.add(1,30); // Inserisce il valore 30 nella posizione di indice 1 
    System.out.println(l); // RISULTATO: [10,30,20]
    
  • Il metodo Collections.sort() è presente in 2 versioni:
    • Uno che prende in input una lista i cui elementi devono implementare l’interfaccia Comparable
    • Uno che prende in input una lista ed una implementazione dell’interfaccia Comparator per ordinare la lista
  • SortedMap ha un costruttore che prende in input una implementazione di Comparator (e NON di Comparable)
  • java.util.Date implementa l’interfaccia Comparable
  • Una SortedMap mantiene le sue entries in ordine crescente se NON gli viene fornita una implementazione dell’interfaccia Comparator da utilizzare per l’ordinamento.
  • La classe TreeSet ha un metodo comparator che ritorna il Comparator utilizzato oppure null se non ne è stato utilizzato nessuno.
  • EnumSet è una speciale implementazione dell’interfaccia Set da utilizzare con dati di tipo enum
  • HashSet è una implementazione dell’interfaccia Set che usa i meccanismi di hashing per fornire un rapido retrieve degli elementi.
  • NavigableSet fornisce dei metodi di navigazione per cercare ad esempio gli elementi che si avvicinano di più ad un determinato elemento.
  • NavigableSet è un’interfaccia, per cui non possono essere creati oggetti di questo tipo con l’operatore new.
  • LinkedHashSet è una sottoclasse di HashSet.
  • TreeSet è una implementazione di Set che mantiene gli elementi ordinati in ordine crescente.
  • Un Set, per definizione, non ammette duplicati.
  • Il metodo peek() delle Queue recupera un elemento dalla cima della coda ma SENZA RIMUOVERE l’elemento dalla struttura.
  • IdentityHashMap e HashTable sono classi che implementano l’interfaccia Map.
  • NavigableMap e ConccurentMap sono invece interfacce che estendono l’interfaccia Map.
  • Il metodo Arrays.asList() ritorna una List basata su un array di lunghezza fissa e NON è modificabile. Se si cerca di eseguire operazioni di modifica sull’oggetto restituito da asList si ottiene una UnsupportedOperationException.
  • Se viene acquisito un Iterator su un TreeSet e poi si fanno delle modifiche al Set, ad esempio tramite il metodo add() o comunque non tramite l’Iterator, si ottiene una
    ConcurrentModificationException
  • CopyOnWriteArraySet è una implementazione di Set che è thread-safe per cui, anche dopo aver acquisito un Iterator su di esso, posso fare modifiche al Set, ad esempio aggiungendo elementi, senza scatenare un’eccezione.
  • Gli elementi aggiunti dopo aver acquisito l’Iterator non compariranno nell’Iterator stesso.
  • CopyOnWriteArraySet NON memorizza gli elementi in modo ordinato.
  • L’interfaccia Iterable dichiara un solo metodo: Iterator iterator();
  • PriorityQueue ordina gli elementi in base al loro “ordinamento naturale” se non specificato diversamente. Ad esempio, per il tipo Integer, l’ordinamento naturale è quello crescente.
  • Il metodo poll() di una implementazione di Queue ritorna l’elemento in testa alla coda e lo rimuove dalla testa della coda stessa.
  • Se si assegna ad un elemento di un array di un tipo, un oggetto di un tipo differente non legato da una relazione padre-figlio alla classe del tipo dell’array, si ottiene una ArrayStoreException.
  • Se si crea una PriorityQueue di oggetti di un tipo definito dall’utente, tale classe deve implementare l’interfaccia Comparable e quindi definire il metodo compareTo() che viene utilizzato dalla Queue per prioritizzare gli elementi secondo un criterio.
  • HashSet non mantiene gli elementi ordinati.
  • ConcurrentSkipListSet mantiene gli elementi ordinati.
  • Come parametro nel costruttore di un ArrayList si può passare una Collection di oggetti del tipo dichiarato nell’ArrayList o sue sottoclassi.
  • SortedMap è un’interfaccia
  • ConcurrentNavigableMap e NavigableMap sono sue sotto-interfacce o ConcurrentSkipListMap e TreeMap sono sue implementazioni concrete
  • This entry was posted in $1$s. Bookmark the permalink.

    Leave a Reply

    Your email address will not be published. Required fields are marked *