Newsgroup: it.comp.java
Titolo: Ordine in Hashtable

Ciao a tutti,
perche se utilizzo il seguente codice:
************************** START *************************
Object[] prodSpec = {"1", "54", "ciao"};
Hashtable kart = new Hashtable();
kart.put("1", prodSpec);
kart.put("2", prodSpec);
kart.put("3", prodSpec);
kart.put("4", prodSpec);
Enumeration enum = kart.keys();
while(enum.hasMoreElements()){
 String prodIDS = (String)enum.nextElement();
     System.out.print(prodIDS + " = ");
 Object[] prodSpecAr = (Object[])kart.get(prodIDS);
 for (int j = 0; j < prodSpecAr.length; j++){
             System.out.println("    " + prodSpecAr[j]);
}// End For
System.out.println("");
}
********************************* END *****************************
perchè cosi non mi mette in ordine la Hashtable???
voglio dire io inserisco gli array in ordine
1
2
3
4
ma quando leggo le enumeration mi ritornano disordinati...
cioè
4
1
2
3
Se volessi averli in ordine di inserimento come farei???
Grazie a tutti
Ciao marco









 Se volessi averli in ordine di inserimento come farei???
Prima di tutto fai attenzione a non postare piu 5 volte lo stesso messaggio,
fa un po' disordine...
Una Hashtable (o una HashMap con Java2) non puo' garantire l'ordine degli
elementi. E' strutturale e non c'é niente da fare, perché é cosi' che
funziona. Se ne vuoi saper di più puoi leggerti qualche libro sulle
strutture di dati, non fa' mai male.
Per mantenere l'ordine non puoi quindi utilizzare una Hashtable. Puoi
eventualmente usare 2 Vector o List associati:
Vector keys = new Vector();
Vector values = new Vector();
keys.add("cane"); values.add("Pluto");
keys.add("gatto"); values.add("Felix");
for(int i=0; i<keys.site(); i++) {
    String a = (String)keys.get(i);
    String b = (String)values.get(i);
    System.out.println(a + ": " +b);
}
Spero sia d'aiuto.
Carlo

Ciao a tutti,
perche se utilizzo il seguente codice:
************************** START *************************
Object[] prodSpec = {"1", "54", "ciao"};
Hashtable kart = new Hashtable();
kart.put("1", prodSpec);
kart.put("2", prodSpec);
kart.put("3", prodSpec);
kart.put("4", prodSpec);
Enumeration enum = kart.keys();
while(enum.hasMoreElements()){
 String prodIDS = (String)enum.nextElement();
     System.out.print(prodIDS + " = ");
 Object[] prodSpecAr = (Object[])kart.get(prodIDS);
 for (int j = 0; j < prodSpecAr.length; j++){
             System.out.println("    " + prodSpecAr[j]);
}// End For
System.out.println("");
}
********************************* END *****************************
perchè cosi non mi mette in ordine la Hashtable???
voglio dire io inserisco gli array in ordine
1
2
3
4
ma quando leggo le enumeration mi ritornano disordinati...
cioè
4
1
2
3
Se volessi averli in ordine di inserimento come farei???




strutture di dati, non fa' mai male.
Occhio... i Container in Java 2 sono stati completamente riveduti e
corretti e ci sono molte novita'.
In particolari, esistono classi che permettono di raccogliere oggetti
mantenendo l'ordinamento per chiave (TreeMap / TreeSet).
L'architettura dei nuovi container non e' proprio banale, ma e'
illustrata pittosto chiaramente nella seconda edizione di TIJ.
In generale, credo che lavorando con Java 2 bisognerebbe
*dimenticarsi* dei vecchi Vector e HashMap e usare le nuove classi,
molto piu' efficaci e coerenti.
Ciao,
 P.
+++ Boing Boom Tschak

molto piu' efficaci e coerenti.
HashMap non ha niente che non va:
http://developer.java.sun.com/developer/onlineTraining/collections/Collection.html#HashMapTreeMapClasses
Idem per il "vecchio" Vector, visto che Set&Sons non permettono
duplicazioni.
Il tutto imo, ovviamente.
-- 
ciao, Marvin

duplicazioni.
Come sopra, inoltre Vector e' piu' lento di 
p.es
. ArrayList (TIJ pag.
505).


 molto piu' efficaci e coerenti.
Sono perfettamente d'accordo con te per quanto riguarda il fatto che
bisogna, in Java2, abbandonare Vector et Hashtable. Purtroppo quelli che
pongono domande spesso sono sufficientemente inesperti per non pensare di
specificare quale JDK usano. Nella fattispecie parto dalla doppia ipotesi
che Marco usi un JDK 1.1 e dunque non abbia a disposizione le nuove classi e
inoltre che sia troppo inesperto per riuscire a disbrigarsi con le
interfaccie Comparator/Comparable necessarie per usare TreeMap/TreeSet. Ecco
la ragione del mio consiglio di usare 2 Vector per risolvere il suo
problema.
Ti faccio notare inoltre che la classe TreeMap non avrebbe risolto il suo
problema. Se si vuole ritrovare le coppie (chiave, valore) nello stesso
ordine in cui le si inserisce, e non in un ordine dipendente dalla chiave,
anche TreeMap é inutile.
bye
Carlo

505).
Si`, qui ho toppato io (mi ero completamente dimenticato di List&Sons)
-- 
ciao, Marvin

 anche TreeMap é inutile.
Ah! Era questa la richiesta? :-)
Allora si', la soluzione e' un po' diversa; non deve essere difficile
comunque crearsi una collezione che permetta sia di accedere agli
oggetti per chiave, sia di restiturli in ordine di inserimento. P.es.
gestendo al suo interno un numeratore..

 Si`, qui ho toppato io (mi ero completamente dimenticato di List&Sons)
Sara' dura abituarsi a fare a meno dei Vector, per riflesso condizionato
io contiuno a tirarli sempre fuori :-)

 writes:
CJ> Sono perfettamente d'accordo con te per quanto riguarda il fatto che
CJ> bisogna, in Java2, abbandonare Vector et Hashtable. Purtroppo quelli che
Pecccato che sostituendo  ArrayList a Vector Exploder 4  dia errore di
instanziazione delle applet *SGRUNT!*
CJ> la ragione del mio consiglio di usare 2 Vector per risolvere il suo
CJ> problema.
Occhio ai due  oggetti paralleli, che si rischia  di chiamare guai (tu
ci hai pensato  di sicuro, ma se non lo  specifichi qualcuno che legge
il consiglio  può non pensarci).   Fortunatamente Java ti  permette di
incapsularli  in  una  classe  dove  puoi  specificare  i  metodi  per
mantenere sempre e comunque allineati i due oggetti.
\begin{avviso}
 
Attenzione: Leggersi lo header riguardo al mio e-mail!
Warning: read header for infos about my e-mail.
\end{avviso}
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+

 ha scritto nel messaggio
news:8t9nng$qoa$1...@nread2.inwind.it...


 Carlo
Ciao Marco