PDA

View Full Version : [JAVA]Chiarimenti


domenico88
21-01-2011, 13:39
ciao a tutti...sono in procinto di fare un esame di programmazione ad oggetti in java...e ho bisogno di qualche chiarimento....

Ancora non ho capito bene a che cosa serve la classe interna di Map, Entry....
cioè quando si fa Map.Entry<K, v>....scusate se sono banale ma sono pieno di dubbi:rolleyes:

banryu79
21-01-2011, 14:19
ciao a tutti...sono in procinto di fare un esame di programmazione ad oggetti in java...e ho bisogno di qualche chiarimento....

Ancora non ho capito bene a che cosa serve la classe interna di Map, Entry....
cioè quando si fa Map.Entry<K, v>....scusate se sono banale ma sono pieno di dubbi:rolleyes:
Un oggetto Map.Entry rappresenta appunto una singola entry nella mappa (ovvero un'entità che incapsula una singola coppia chiave-valore).

Nel caso in cui ti occorra iterare tutti gli elementi della mappa e ti serva sia la chiave che il valore associato, è più efficiente farsi restituire dalla mappa stessa il set di Map.Entry che essa contiene e iterarlo, piuttosto che chiede alla mappa il set di chiavi che essa contiene, per poi iterarle e per ognuna far eseguire un'operazione di get alla mappa per ottenere il valore associato.

Data la mappa:

Map<String, MyObject> map = new HashMap<String, MyObject>();
// inizializza la mappa
...


In pratica, fare così:

for (String key : map.keySet()) {
MyObject value = map.get(key);
// usa key e value...
}

è meno efficiente che fare così:

for (Map.Entry<String,MyObject> e : map.entrySet()) {
String key = e.getKey();
MyObject value = e.getValue();
// usa key e value...
}

domenico88
21-01-2011, 15:59
uhm quindi usando Map.Entry diciamo che l'iterazione sulla mappa diventa più efficiente?
Sulla documentazione di java c'è scritto che il metodo entryset() ritorna una vista-collezione della mappa...e che gli oggetti Map.Entry sono validi solo per la durata dell'iterazione...:confused:

purtroppo...il mio libro dell'uni Thinking in java 4ed fa solo esempi ed esempi ed esempi sulle classi...nn tratta questi aspetti!

banryu79
21-01-2011, 16:16
purtroppo...il mio libro dell'uni Thinking in java 4ed fa solo esempi ed esempi ed esempi sulle classi...nn tratta questi aspetti!

Perchè queste faccende sono "dettagli dell'implementazione" e sui libri in genere non c'è abbastanza spazio per trattarli; inoltre questo tecnicamente è un'aspetto legato alla libreria piuttosto che al linguaggio Java (e in un libro il cui tema è il linguaggio di programmazione in generale è difficile che ci si addentri a parlare di queste questioni).
Inoltre Java a livello di linguaggio nudo e crudo non fornisce niente di "raffinato" in termini di collezioni già pronte all'uso (mentre ad esempio Python tra i tipi built-in, cioè facenti parte del linguaggio stesso prevede già liste, tuple, set e dizionari, dunque in un libro che tratta questo linguaggio di programmazione sicuramente li trovi trattati).

Comunque ci sbatti agevolmente la capoccia contro nel momento in cui passi dalla teoria alla pratica e per implementare le prime mini-applicazioni, affronti problemi un attimo meno che banali e cominci a sentire il bisogno di usare le collezioni della libreria in modo più "consapevole".


...uhm quindi usando Map.Entry diciamo che l'iterazione sulla mappa diventa più efficiente?

Se devi iterare tutti gli elementi presenti è più veloce farsi dare subito dalla mappa tutte le coppie chiave-valore presenti (cioè tutti i Map.Entry) piuttosto che farsi dare tutte le chiavi dalla mappa per poi usarle una alla volta per chiedere alla mappa di trovare e restituire il valore associato ogni volta.

domenico88
21-01-2011, 20:03
ok grazie!:)