JavaProgrammazione

Collection & Map

Capita di dover gestire dinamicamente insieme di dati all’interno di particolari strutture (aggiungere, rimuovere o visualizzare). Possiamo affrontare questo problema nella scelta di interfacce che descrivono i tipi base in modo astratto per poi implementarle con la classe.

L’interfaccia java.util.Collection descrive il tipo astratto collezione, alcuni metodi:

  • add – aggiungiamo un elemento;
  • remove – rimoviamo un elemento;
  • contains – testiamo la presenza;
  • isEmpty – verifichiamo se vuota;
  • clear – elimina gli elementi;
  • size – restituisce il totale;
  • iterator – ripetere gli elementi;

Per la gestione di liste e code estendiamo java.util.Collection in java.util.List<E> e java.util.Queue<E>.

  • add – aggiunge l’elemento nella posizione specificata;
  • get – recupera l’elemento nella posizione specificata;
  • indexOf – recupera l’indice di un elemento;
  • remove – rimuove l’elemento nella posizione specificata;

Le classi che implementano List sono: java.util.Vector, java.util.Stack, java.util.ArrayList, le API Java 8 suggeriscono java.util.Deque.

Come esempio realizziamo una lista di caratteri e il rispettivo peso (numero di presenze in un file), iniziamo nel definire una classe astratta

Realizziamo la classe che rappresenta un carattere

Implementiamo la classe

Realizziamo un semplice main che ne testa il funzionamento

Un metodo alternativo per visualizzare gli elementi tramite for-enanched

for (ListaCaratt listaCaratt : listaPesiCaratt) {

Le code realizzabili attraverso l’interfaccia java.util.Queue ordinano gli elementi secondo le specifiche First In First Out, i metodi più usati sono:

  • boolean add(E e), boolean offer(E e) – inserisce un elemento se possibile;
  • E element()E peek() – restituiscono l’elemento in testa alla coda senza rimuoverlo;
  • E poll() – restituisce l’elemento in testa alla coda;
  • E remove() – rimuove l’elemento in testa alla coda;

Un insieme, definito tramite l’interfaccia java.util.Set<E>, non ammette duplicati e non ordina i suoi elementi; tramite l’estensione java.util.SortedSet permette una coda ordinata.

In particolare se abbiamo due oggetti A e B, se A.equals(B) allora A.hashCode() restituisce lo stesso valore di B.hashCode(). Le propietà di equals sono:

  • riflessiva – un oggetto è uguale a se stesso;
  • simmetrica – se A.equals(B) e B.equals(A) restituiscono true;
  • transitiva – se A.equals(B) e B.equals(C) restituiscono true anche A.equals(C) restituisce true;

La classe TreeSet consente di definire un ordinamento sugli elementi aggiunti, la quantità di tempo richiesta è proporzionale al logaritmo del numero dei suoi elementi.

L’interfaccia java.lang.Comparable prevede il metodo compareTo che ritorna un numero positivo se l’oggetto corrente è maggiore di quello passato come parametro.

L’interfaccia java.util.Map<K,V> definisce la struttura dati Mappa che non estende Collection. La chiave è ciò che identifica univocamente un elemento della mappa. Ecco alcuni metodi:

  • V put(K key, V value) – inserisce un valore;
  • V get(object key) – legge un valore;
  • boolean contansKey(object key) – verifica la presenza di un elemento;
  • void clear() – cancella tutti gli elementi;
  • set<K> KeySet() – recuperiamo l’insieme delle sole chiavi;
  • Collection<V> values – recuperiamo l’insieme dei soli valori;

Per avere un ordinamento a livello di chiavi bisogna implementare l’interfaccia java.util.SortedMap.

I metodi più usati della classe Collection sono:

  • static boolean disjoint(Collection c1, Collection c2) – restituisce true se le due collezioni hanno un elemento in comune;
  • static int frequency(Collection c, Object obj) – restituisce il numero di elementi uguali all’oggetto;
  • static Object max(Collection c) – restituisce l’elemento massimo della collezione;
  • static Object min(Collection c) – restituisce l’elemento minimo della collezione;
  • static void reverse(List list) – inverte l’ordine degli elementi della lista;
  • static void shuffle(List list) – definisce un nuovo ordinamento casuale;
  • static void sort(List list) – consente l’ordine naturale degli elementi;
Follow by Email
Facebook
Twitter
Telegram