-
Map
è una collezione che associa chiavi ai suoi elementi. Le mappe non possono contenere chiavi duplicate e ogni chiave può essere associata a un solo valore. -
Map
non è propriamente una Collection poiché non implementa l’interfaccia Collection. -
Associazione chiave-valore (key-value)
- codice fiscale - persona
- matricola - studente
-
Permette ricerche data la chiave
-
Non possono esserci chiavi duplicate
- HashMap
- Implementazione basata su tabella di hash
- Possibile impostare capacità e fattore di carico per ottimizzare le prestazioni
- TreeMap
- Implementazione basata su struttura ad albero
- Si ottengono i dati ordinati
- Disponibilità del metodo subMap() che fornisce un sotto-albero
- LinkedHashMap
- Sottoclasse dell'HashMap
- Mantiene l'ordine di inserimento dei dati grazie a una lista (in aggiunta alla hash)
- Gli iterator forniscono l'ordine di inserzione
L’interfaccia Map
rappresenta un insieme di elementi, ad ognuno dei quali viene associata una chiave univoca.
Non sono permessi elementi duplicati e null.
E’ preferibile usare le mappe piuttosto che i set in quanto è possibile ricercare facilmente un oggetto all’interno di una mappa a partire dalla sua chiave univoca ed anche perché è possibile accedere agli oggetti in modo veloce.
Le implementazioni di Map
sono HashTable e HashMap
.
Un’implementazione di SortedMap
è TreeMap
.
Entrambe non ammettono elementi duplicati.
HashMap
risulta più performante di HashTable
, in quanto quest’ultima è sincronizzata di default mentre HashMap
non lo è
(i metodi di accesso agli oggetti non sono Synchronized)
HashMap
risulta più performante di TreeMap
, in quanto quest’ultima gestisce l’ordinamento
public void clear()
permette di svuotare laMap
public boolean containsKey(Object arg0)
verifica l’esistenza di un oggetto all’interno dellaMap
in base alla sua chiavepublic boolean containsValue(Object arg0)
verifica l’esistenza di un oggetto all’interno dellaMap
in base al suo valorepublic Set entrySet()
restituisce laMap
sottoforma di Setpublic Object get(Object arg0)
restituisce l’oggetto in base alla sua chiavepublic boolean isEmpty()
verifica se laMap
è vuotapublic Set keySet()
restituisce le chiavi dellaMap
sottoforma di Setpublic Object put(Object arg0, Object arg1)
aggiunge un oggetto allaMap
public void putAll(Map arg0)
aggiunge unaMap
di oggetti allaMap
consideratapublic Object remove(Object arg0)
rimuove un oggetto dallaMap
public int size()
restituisce il numero di elementi presenti nellaMap
public Collection values()
restituisce laMap
sottoforma di Collection
-
Comparator comparator ()
Produce meccanismo di confronto -
Object firstKey()
Produce la chiave più piccola -
Object lastKey()
Produce la chiave più grande -
SortedMap subMap(<from>, <to>)
Crea una sotto-map dalla map completa estraendono una porzione -
SortedMap headMap(<to>)
Crea una sotto-map con elementi minori di quello indicato -
SortedMap tailMap(<from>)
Crea una sotto-map con elementi maggiori o uguali a quello indicato
HashTable | HashMap |
---|---|
HashTable hash = new HashTable(); | HashMap map = new HashMap(); |
hash.put("1", "Data attuale"); | map.put("1", "Data attuale"); |
hash.put("2", new Date()); | map.put("2", new Date()); |
hash.put("3", hash); | map.put("3", map); |
int size = hash.size(); | int size = map.size(); |
for (int i=1; 1<=size; i++) { | for (int i=1; 1<=size; i++) { |
out.print(hash.get(""+i)); | out.print(map.get(""+i)); |
} | } |
E’ possibile aggiungere elementi mediante il metodo put(Object key, Object value) e si recuperano mediante il metodo get(Object key). In particolare, il metodo get() permette un recupero molto performante dell’elemento della collezione, mediante la specifica della chiave.
Per iterare sulle mappe occorre utilizzare, oltre al solito iterator, anche:
- la classe innestata
Map.Entry
, la quale astrae una coppia di tipo chiave-valore che rappresenta un elemento di una mappa - il metodo entrySet() restituisce un insieme ordinato (in base alle chiavi) degli elementi della mappa
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "pippo");
map.put(2, "pluto");
map.put(3, "paperino");
map.put(4, "quiquoqua");
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
System.out.println("Chiave: " + entry.getKey());
System.out.println("Valore: " + entry.getValue());
}