![]() ![]() |
Un insieme è una collezione in cui gli
elementi compaiono senza ripetizioni, e non sono organizzati in un ordine prefissato.
Le principali operazioni su insiemi sono le seguenti:
Esistono inoltre le classiche operazioni insiemistiche (unione, intersezione, complemento), che non sempre sono presenti in una interfaccia minimalista.
Nella pratica, vi sono molti modi per realizzare un insieme ognuno con i suoi vantaggi e svantaggi.
|
![]() ![]() |
La classe java.util.BitSet implementa vettori di bit che aumentano se necessario. Ogni componente del BitSet è individuata da un intero nonnegativo ed è associata ad un valore booleano, memorizzato in un bit, a cui si può accedere individualmente. Per una descrizione esauriente si rimanda alla documentazione ufficiale, qui ci limitiamo a segnalare i metodi principali.
Attenzione BitSet non implementa l'interfaccia Set descritta nel seguito.
L'esempio che segue mostra come BitSet può essere usata per realizzare il crivello di Eratostene per il calcolo dei numeri primi.
|
![]() ![]() |
L'interfaccia java.util.Set<T> specifica il tipo Set con elementi di tipo
Per una descrizione esauriente si rimanda alla documentazione ufficiale, qui ci limitiamo a segnalare i metodi principali.
Si noti che alcune operazioni sono opzionali, ovvero non necessariamente presenti in tutte le implementazioni. Nel contesto del linguaggio Java, dire che un metodo di una interfaccia è opzionale significa che tale metodo deve essere comunque implementato, limitandosi a lanciare una UnsupportedOperationException
|
![]() ![]() |
La classe HashSet implementa insiemi con le tabelle hash.
L'esempio che segue mostra come HashSet può
essere usata per implementare un'insieme di stopwords.
Ricordiamo che le stopword sono parole usate frequentemente, come la congiunzione "e", che non vengono prese in considerazione
durante le operazioni di indicizzazione (per esempio vengono ignorate nelle interrogazioni dei motori di ricerca).
|
![]() ![]() |
La classe TreeSet implementa tabelle con gli alberi binari di ricerca.
L'esempio che segue mostra come TreeSet può
essere usata per eliminare i duplicati da un iteratore su una struttura (di elementi che implementano
Comparable<T>) rendendo un iteratore che scorre i dati secondo l'ordine indotto dal metodo
compareTo().
|
![]() ![]() |
![]() ![]() |
1) Si scriva la classe SetTheory.java, che contiene i seguenti metodi:
Si scriva un programma di test che, senza modificare la classe, usi sia l'implementazione con HashSet che con TreeSet. 2) Si scriva la classe StaticSetTheory.java, non istanziabile, che contiene i seguenti metodi:
Si scriva un programma di test che, senza modificare la classe, usi sia l'implementazione con HashSet che con TreeSet. 3) Utilizzando la classe BitSet si scriva un programma che riceve come argomento (NB non legge da console) un numero positivo n e stampa quanti sono i numeri interi compresi tra 1 e n che sono rappresentabili come
|