Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    Cerco 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

  2. #2
    Hashtable
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Cerco struttura dati non-ordinata che non ammette duplicati.

    Originariamente inviato da Metallica
    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
    Tieni presente una cosa molto importante: tutte le classi collection possono essere definite ordered (o al contrario unordered) e sorted (o al contrario unsorted).

    Ordered vuol dire che la iterazione sulla collection viene fatta con un ordine ben preciso, non casuale. Qui non centra nulla il contenuto degli oggetti. Un ArrayList è ordered perché iterando parto dall'indice 0, 1, 2, ecc.... Un HashSet è unordered perché l'iterazione prende gli oggetti senza un ordine preciso.

    Sorted vuol dire che la collection è mantenuta ordinata basandosi sulle caratteristiche dell'oggetto contenuto, quindi o tramite il suo ordine "naturale" (Comparable) o tramite un Comparator.

    (notare che sorted è un caso specifico di ordered, quindi non ci può essere unordered/sorted!)

    In java.util ci sono diverse implementazioni dell'interfaccia Set. Le 3 principali sono:

    HashSet: è unordered/unsorted
    TreeSet: è ordered/sorted (tramite ordine "naturale" o Comparator)
    LinkedHashSet: è ordered/unsorted

    Da quello che dici, allora quella che ti serve è la HashSet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    quindi cerchi una struttura dati ordinata, perche' se la struttura dati fosse "non ordinata" (come nel caso di HashSet), potresti avere ogni volta un ordinamento differente degli elementi...

    Ci sono LinkedHashSet, che dovrebbe mantenere l'ordine di inserimento degli elementi (mentre in HashSet butti dentro oggetti e quando lo cicli non sai in che ordine vengono fuori, con questo dovrebbero uscire esattamente nell'ordine con cui li hai inseriti), e TreeSet (ti mette in ordine automaticamente le entita' presenti al suo interno, a patto che implementino l'intefaccia Comparable).

    edit: andbin mi ha ricordato che con TreeSet si puo' anche specificare un determinato Comparator per l'ordinamento degli elementi, non occorre che questi ultimi implementino Comparable.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nether
    quindi cerchi una struttura dati ordinata
    Ma se lui ha detto: Cerco struttura dati non-ordinata [...] che non ammetta duplicati e che non riordini gli elementi
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376

    Re: Cerco struttura dati non-ordinata che non ammette duplicati.

    Originariamente inviato da Metallica
    allora ho usato set, questo mi elimina il problema dei duplicati, ma come list, mi riordina sempre gli elementi.
    credevo avesse usato HashSet e per "riordinare sempre gli elementi" intendesse che ogni volta che ciclava l'array (magari premendo F5 sul browser in caso di una web application) gli elementi gli venissero restituiti in un ordine differente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Non cambia la situazione con HashSet, in pratica io devo riempire una jList con i dati provenienti da un ResultSet che ha questa forma:

    codice:
    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:

    codice:
    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.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Metallica
    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:

    codice:
    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.
    Ma perché allora non crei una classe che "incapsula" i dati di una riga del resultset e quindi inserisci nella JList oggetti di questa classe???

    EDIT: Comunque se vuoi che il resultset abbia un suo ordine, devi specificarlo nella query, ovviamente!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Originariamente inviato da andbin
    Ma perché allora non crei una classe che "incapsula" i dati di una riga del resultset e quindi inserisci nella JList oggetti di questa classe???

    EDIT: Comunque se vuoi che il resultset abbia un suo ordine, devi specificarlo nella query, ovviamente!
    Della prima parte ho capito poco, per quando riguarda l'edit non voglio che sia ordinato, voglio solo che l'associazione tra ID_MAL e MALATTIA sia mantenuto.

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Metallica
    Della prima parte ho capito poco
    Crei una semplice classe:
    codice:
    public class Malattia {
        private String nome;
        private String id;
    
        public Malattia (String nome, String id) {
            this.nome = nome;
            this.id = id;
        }
    
        public String getNome () {
            return nome;
        }
    
        public String getId () {
            return id;
        }
    
        public String toString () {
            return nome + " " + id;
        }
    }
    Nel loop in cui scansioni il recordset, crei un oggetto Malattia usando i dati presi dalla riga. L'oggetto lo inserisci direttamente nel JList, dove verrà mostrato il testo fornito dal toString() dell'oggetto. Quando a seguito di una select o altro relativa al JList, potrai sempre riottenere un oggetto Malattia e usarne i campi per altre cose (per es. l'id).

    Ma tutto questo cosa centra con collezioni, set, hashset????
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.