Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    2

    [JAVA] TreeMap ordinamento per valore

    Sto impazzendo, volevo ordinare una TreeMap per valore e non per chiave... qualcuno potrebbe aiutarmi
    grazie, ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ti serve una struttura di tipo map? Cioe' devi anche accedere ai valori per chiave oltre che averli ordinati? Se la risposta e' no usa TreeSet e non TreeMap.
    Se ti serve una mappa, ma non ti serve di ordinarla per chiave, puoi anche non usare una TreeMap e optare per un HashMap che generalmente e' piu' veloce.
    Per l'ordinamento: il metodo values() su qualunque map restituisce una Collection contenente tutti i valori, una volta ottenuta la Collection. la puoi ordinare attraverso il metodo Collections.sort. Qui puoi seguire due strade, ordine naturale (cioe' quello di default oppure quello che decidi tu facendo estendere alla classe Comparable e sovrascrivendo opportunamente il metodo CompareTo) oppure attraverso una tua classe che implementa l'interfaccia Comparator.
    codice:
    Map mappa = new HashMap() //O TreeMap se preferisci
    //ALTRO CODICE
    Collection collezione = mappa.values();
    Collections.sort(collezione); 
    //Secondo ordine naturale;
    codice:
    Map mappa = new HashMap() //O TreeMap se preferisci
    //ALTRO CODICE
    Collection collezione = mappa.values();
    Comparator c = new tuoComparator();
    Collections.sort(collezione, c); 
    //Secondo Comparator;
    P.s. Non so se esistono metodi piu' furbi, questo comunque dovrebbe andare.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    2
    Purtroppo ho bisogno delle chiavi... quello che devo realizzare in poche parole è una classifica Nome, Punteggio e devo ordinare i partecipanti per punteggio.
    Avevo pensato di memorizzarli in una
    codice:

    Map<String, Integer>


    consigli su come ordinarli per valore

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ok, ho capito lo scenario. Purtroppo nelle Api non ho trovato nulla che fa al caso tuo.
    Se accetti un po' di ridondanza, posso proporti due soluzioni.

    Soluzione 1) La Map diventa cosi' tipizzata
    Map<String, Partecipante> dove String e' il nome e Partecipante e' un oggetto contenete nome e punteggio, quest'ultimo estende Comparable e nel metodo compareTo, richiama il metodo CompareTo del Integer della prima classe passandogli l'Integer della seconda.
    Hai una mappa e quando ti serve la lista ordinata fai come ho scritto sopra (Ottieni la Collection e fai il sort()). L'inconveniente e' che computazionalmente devi riordinare ogni volta.

    Soluzione 2) Ti scrivi una classe che estende una HashMap e all'inteno ci metti anche un TreeSet privato che conterra' i valori, sovrascrivi i costruttori e metodi clear, clone, put, putAll e remove in modo che chiamino il metodo della superclasse e facciano l'operazione anche sul TreeSet, infine sovrascrivi il metodo values() perche' ti restituisca il TreeSet(che dovrebbe essere ordinato). Hai una struttura dati in piu' che resta nascosta al livello superiore, i cui elementi puntano agli stessi oggetti puntati dai valori della HashMap. Nel codice poi usi la tua "OrderedByValuesHashMap" in maniera normale e quando ti serve la lista dei valori, chiami il metodo values().

  5. #5
    i tuoi dati vengono prelevati da un DB? In questo caso ti fai l'ordinamento tramite la query e poi per memorizzare le coppie chiave-valore, puoi utilizzare questa classe che implementa una Hashtable ordinata così come vengono inseriti gli elementi.
    Al mio segnale... scatenate l'inferno!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Oppure la LinkedHashMap presente nel JRE. E' praticamente analoga alla classe che ha proposto R@ve tranne che permette null come chiave e non e' sincronizzata (quindi leggermente piu' efficente, ma inadatta ad accessi concorrenti).

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.