Visualizzazione dei risultati da 1 a 4 su 4

Discussione: TreeMap

  1. #1

    TreeMap

    Ciao a tutti,
    mi occorre una struttura dati che preservi l'ordinamento e che contenga delle coppi chiave, valore <String,String>.
    Credo che l'unica sia TreeMap<String,String>..
    Sapete come fare se devo scorrerlo tutto?
    TreeMap ha per caso qualche svantaggio?

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

    Re: TreeMap

    Originariamente inviato da Gianluigi83
    mi occorre una struttura dati che preservi l'ordinamento e che contenga delle coppi chiave, valore <String,String>.
    Credo che l'unica sia TreeMap<String,String>..
    Sì, TreeMap mantiene internamente la collezione ordinata in base al contenuto delle chiavi (basandosi su Comparable o un Comparator).

    Originariamente inviato da Gianluigi83
    Sapete come fare se devo scorrerlo tutto?
    Puoi prendere un Set delle chiavi o delle entry, vedi keySet() e entrySet() ed iterare sul Set. TreeMap comunque è un NavigableMap, puoi anche fare altri tipi di ricerche sulla map (es. dammi la chiave più alta, dammi la chiave appena maggiore di X, ecc....)

    Originariamente inviato da Gianluigi83
    TreeMap ha per caso qualche svantaggio?
    Il fatto che TreeMap è organizzato internamente come un albero (Red-Black), porta al fatto che per cercare una chiave o sapere dove inserire una chiave, deve fare delle comparazioni con le chiavi lungo l'albero. Da qui deriva che la complessità è O(log N) per la ricerca/inserimento di una chiave.
    Mentre una HashMap, per queste cose, ha una complessità O(1) (teoricamente cioè in tempo costante).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sono riuscito a implementare l'ordinamento facendo uso di un TreeSet unitamente al TreeMap nel seguente modo:

    codice:
    (*) TreeSet ts = new TreeSet(new Comparator() {
       	            						public int compare(Object obj, Object obj1) {
    (*)	            												int vcomp = ((Comparable) ((Map.Entry) obj1).getValue()).compareTo(((Map.Entry) obj).getValue());
    (*)	            												if (vcomp != 0) return vcomp;
    	            												else return ((Comparable) ((Map.Entry) obj1).getKey()).compareTo(((Map.Entry) obj).getKey());
    	            						}
    	        						});
    	        
    (*)	        ts.addAll(elenco.entrySet());
    	        System.out.println("+++ Lista dei collaboratori (NOME,OCCORRENZE) +++\r\n");
    (*)	        for (Iterator i = ts.iterator(); i.hasNext();) {
    (*)	            Map.Entry entry = (Map.Entry) i.next();
    	            System.out.println(Acquisizione.estrapolaNome(Acquisizione.strutturaSchedaAttore(entry.getKey().toString())) + " - " + entry.getValue());
    	        }
    ma mi vengono segnalati alcuni warnings (dove ho messo l'asterisco) che comunque non hanno conseguenze sul funzionamento del programma e che in java 5 non vengono segnalate (io ho jre 1.6).
    Nello specifico mi viene detto che i riferimenti al tipo generico TreeSet<E> devono essere parametrizzati e la stessa cosa mi viene detta per Map<K,V>.Entry<K,v>.
    Ma cosa si intende per parametrizzare? Ho provato a modificare sostituendo TreeSet con TreeSet<Object> e Map.Entry con Map<String,Integer>.Entry<String,Integer> ma a questo punto da errore.

  4. #4

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.