Newsgroup: it.comp.java
Titolo: cosasignifica?

Tecno e' una classe con vari attributi e metodi.
Non capisco cosa significa questa dichiarazione:
LinkedHashMap<Tecno, Boolean> roleMap = [:]
Inserisce attributi e valori di Tecno in una LinkedHashMap?

 LinkedHashMap<Tecno, Boolean> roleMap = [:]
http://java.sun.com/docs/books/tutorial/java/generics/index.html
LinkedHashMap<K, V> -> K, tipo della chiave; V, tipo del valore.

Manuel T ha scritto:

Ma e' come una normale hashMap.

 Ma e' come una normale hashMap.
Mentre nella HashMap non � detto che le coppie valore vengano inserite 
nelle stesso ordine con cui si mettono, nella LinkedHashMap viene 
rispettato l'ordine di inserimento.
ciao

 Ma e' come una normale hashMap.
http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedHashMap.html
nella prima riga e mezza c'è scritta la differenza.


Capisci anche tu che non significa nulla quello che hai scritto, vero?

cicap ha scritto:
  > Capisci anche tu che non significa nulla quello che hai scritto, vero?
Se non lo capisci � un problema tuo ...Se vuoi te lo rispiego:
In una HashMap l'ordine di inserimento delle coppie chiave valore � 
casuale nel senso che se dopo avere aggiunto una coppia ne aggiungi 
un'altra non � detto che la secondo coppia venga messa in ordine dopo la 
prima . Se invece usi una LinkedHashMap e dopo avere inserito una coppia 
chiave valore ne inserisce un'altra sicuramente la seconda coppia verr� 
inserita dopo la prima per cui nella LinkedHashMap c'� un ordinamento 
delle coppie chiave valore

 HashMap l'ordine di inserimento delle coppie chiave valore è casuale
l'ordine di inserimento sarà (ovviamente) l'ordine con cui inserisci le 
coppie chiave/valore, è un assioma.
la LinkedHashMap garantisce che l'ordine di *iterazione* rispecchi 
l'ordine di inserimento.

 prima .
L'ordine di inserimento non � dipendente dalla struttura dati ma dal 
flusso di esecuzione.
Esso pu� essere significativo o meno nel momento in cui si va ad iterare 
sulla struttura dati. Nel caso di una semplice HashMap esso non � 
significativo, mentre lo � nel caso della LinkedHashMap il cui ordine di 
iterazione rispecchia quello di inserimento.

 l'ordine di inserimento.
Questo è vero ma ciò avviene proprio perchè la LinkedHashMap è una mappa 
ordinata a differenza dell'HashMap

 iterazione rispecchia quello di inserimento.
Il fatto che l'itreazione rispecchi l'ordine di inserimento � solo una 
conseguenza del fatto che le strutture dati suddette sono ordinate

 ordinate
Errata corrige: l'ArrayList � ordinato come la LinkedList

 Io questa frase non l'ho scritta
L'hai scritto eccome:
"Mentre nella HashMap non è detto che le coppie valore vengano inserite 
nelle stesso ordine con cui si mettono"
Siccome abbiamo capito che in realtà sai come si utilizza la 
LinkedHashMap, immagino che "mettere" sta per inserire, e "inserire" lo 
usi per descrivere l'implementazione interna della LinkedHashMap, 
probabilmente sotto-intendendo che la struttura dati in questione 
possiede una lista interna dove vengono inserite le chiavi per mantenere 
l'ordinamento di inserimento.
E' una brutta descrizione perché invece di specificare il comportamento 
della struttura dati, stai descrivendo in maniera contorta 
l'implementazione interna o una possibile implementazione che tu 
sceglieresti.

 Errata corrige: l'ArrayList � ordinato come la LinkedList
mentre la HashSet � non ordinata a differenza della LinkedHashSet che � 
ordinata

 conseguenza del fatto che le strutture dati suddette sono ordinate
Ti sbagli, in quanto l'ordine di iterazione *�* l'ordinamento della 
struttura dati.
Il resto sono dettagli di implementazione non strettamente necessari per 
descrivere la struttura dati in questione.

 struttura dati.
Non � vero, dipende dalla struttura dati...

 ci� potrebbe notarsi nell'iterazione
Non sapevo che l'esecuzione dei programmi fosse casuale. Credo tu stia 
riscrivendo le leggi fondamentali della scienza dell'informazione.
A quando una pubblicazione?

 Allora non conosci il significato di "ordine di inserimento".
Penso che a te sia ancora meno chiaro cosa si intende per ordine di 
inserimento, cosa che questo codice dimostra appieno:
package it.app.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.NoSuchElementException;
/**
 *
 * @author enrico
 */
public class TestHash {
    public static void main(String[] args) {
        Map test1 = new HashMap();
        Map test2 = new LinkedHashMap();
        boolean run;
        for (int i = 1; i <= 50; i++) {
            test1.put(i, "Inserito elemento " + i);
            test2.put(i, "Inserito elemento " + i);
        }
        System.out.println("-----------------------------");
        System.out.println("Ordinamento dati nell'HashMap");
        System.out.println("-----------------------------");
        run = true;
        Iterator it1 = test1.entrySet().iterator();
        while (run) {
            try {
                Object i = it1.next();
                System.out.println(i);
            } catch (NoSuchElementException e) {
                run = false;
            }
        }
        System.out.println("");
        System.out.println("-----------------------------");
        System.out.println("Ordinamento dati nella LinkedHashMap");
        System.out.println("-----------------------------");
        run = true;
        Iterator it2 = test2.entrySet().iterator();
        while (run) {
            try {
                Object i = it2.next();
                System.out.println(i);
            } catch (NoSuchElementException e) {
                run = false;
            }
        }
        System.out.println("-----------------------------");
    }
}

 delle coppie chiave valore
Forse, e dico pare, si riferisce al fatto che in generale, per qualsiasi 
collection, l'ordine di inserimento non dipende dalla collection in se', 
ma da chi ci inserisce gli elementi.
Si sarebbe capito meglio se avessi scritto che l'ordine di reperimento, 
ovvero di iterazione, di una LinkedHashMap rispecchia l'ordine di 
inserimento.

 inserimento, cosa che questo codice dimostra appieno:
Come no, e cosa dovrebbe dimostrare quel codicillo? A parte il fatto
che non conosci l'italiano, intendo.

 inserimento.
Si effettivamente ordine di reperimento rende meglio che ordine di 
inserimento perchï¿œ come dici giustamente tu l'ordine di inserimento non 
dipende dalla Collection.
ciao

 Ma e' come una normale hashMap.
Una lista � una struttura ordinata di elementi, una tabella hash � una 
struttura che abbina una chiave un valore.
La LinkedHashMap � (una classe che implementa le funzionalit� di) una 
tabella hash dove inoltre gli elementi sono ordinati.
Ciao,
Pablo

 che non conosci l'italiano, intendo.
Senti, posto che a quanto pare nemmeno ti sei degnato di leggere la 
documentazione di LinkedHashMap (in cui parla esplicitamente di "insert-
order" che, tra l'altro, e` il comportamento predefinito, e "access-order"), 
avresti potuto leggere il flusso di funzionamento del codice da me postato. 
Che poi, dire che sarebbe stato meglio utilizzare come terminologia "ordine 
di iterazione" o "ordine di reperimento", e` concettualmente sbagliato. Io 
prima *inserisco* un elemento in una collection (sia essa ordinata o meno), 
e dopo lo processo come meglio mi aggrada (come tu giustamente fai notare). 
Tra l'altro, non e` per niente detto che l'ordine di inserimento rispecchi 
l'ordine di iterazione, anche se si utilizza una LinkedHashMap, ovvero, 
nessuno mi vieta di utilizzare su quest'ultima il metodo get() per estrarre 
i valori (va da se che non avrebbe senso utilizzarla al posto di una normale 
HashMap, ma in sostanza non mi vieta di fare operazioni del genere)
Enrico

 HashMap, ma in sostanza non mi vieta di fare operazioni del genere)
Spiacente, ma questo non centra nulla con l'ordine di iterazione,
visto che get accetta un parametro che è la chiave della entry che
voglio reperire.