Newsgroup: it.comp.java
Titolo: Struttura dati non-ordinata che non ammette duplicati

Allora ho un metodo che inizialmente usava una lista come struttura
dati per memorizzare degli elementi, funzionava correttamente se non
per il problema che manteneva in memoria i duplicati, allora ho usato
set, questo mi elimina il problema dei duplicati, ma come list, mi
riordina sempre gli elementi.
Qualcuno conosce una struttura con le stesse potenzialità di list/set
(intendo, possibilità di non dover dichiarare la grandezza della
struttura e possibilità di usare metodi come add per aggiungere
elementi nella struttura) che non ammetta duplicati e che non riordini
gli elementi? Grazie

 gli elementi? Grazie
add e' un metodo definito nell'interfaccia List dubito che lo troverai
nei Set... HashSet usando il metodo put non ti va bene?


List non riordina affatto gli elementi. Anzi, rispetta l'ordine di
inserimento.
Set invece credo che "non prometta" nulla. Se lo vuoi ordinato usi
TreeSet.


in pratica io devo riempire una jList con i dati provenienti da un
ResultSet che ha questa forma:
ID_MAL, MALATTIA
2, Bronchite
22, Celiachia
23, Diabete
Il metodo che riempe la jlist è il seguente:
codice:
private void creaLista(ResultSet cursore, String tipo) throws
SQLException {
// ...
        int i = 0;
        Set lista = new HashSet();
            cursore.beforeFirst();
            // finchè il cursore può avanzare, aggiungi il nome della
malattia alla var lista
            // e aggiungi il rispettivo id della malattia alla
variabile lista_id
            while(cursore.next()) {
                    lista.add(cursore.getString("MALATTIA"));
                    lista_id.add(cursore.getString("ID_MAL"));
            }
            // calcola la dimensione della variabile lista e converto
il tutto in 2 array
            int size = lista.size();
            String[] array = (String[])lista.toArray(new
String[lista.size()]);
            String[] array_id = (String[])lista_id.toArray(new
String[lista_id.size()]);
            // finchè gli elementi della lista non sono finiti
            // aggiungi la coppia "malattia id_mal" nella jlist
            while(i < size){
                    lstMalMod.addElement(array[i]+" "+array_id[i]);
                    i++;
            }
}
Fin qui sembrerebbe non esserci nulla di anormale, ma, benchè il
resultSet che passo al metodo non ha nessun tipo di ordinamento le
stringhe nella jList risultano:
Bronchite 2 (esatto per pura coincidenza)
Diabete 22 (doveva essere 23 non 22)
Celiachia 23 (doveva essere 22 non 23)
Notare che le associazioni tra la malattia e l'id della malattia
stessa sono completamente diverse da quelle corrette che erano nel
ResultSet.

ResultSet.
Attenzione al fatto che tu stai utilizzando due liste diverse: pertanto, se 
HashSet come credo di ricordare non conserva l'ordine di inserimento degli 
elementi, le due liste procederanno... l'una per i fatti suoi. Potresti 
magari definire una classe malattia del tipo
class Malattia {
    String id;
    Strind descrizione;
    public Malattia(String id, String descr) {
    //....
   }
    public String toString() {
        return "["+id+"] : "+descrizione;
    }
}
e gestire un'unica lista di risultati.
Saluti,
    Scorpio. 

 ha scritto nel messaggionews:1176217847....@n76g2000hsh.googlegroups.com...

Si avevo pensato a una cosa del genere ma ormai è tardi per
implementare questa soluzione, visto che di creaLista si fà un uso
massiccio all'interno del progetto.

 ResultSet.
... ma non ti conveniva usare una Map?
pole
-- 
ammentos - a lightweight persistence framework for JDK5
http://ammentos.biobytes.it
Flash tutorial: 
http://ammentos.biobytes.it/quickstart/quickstart.html

LinkedHashSet?


Quoto