2011-09-15 7 views
46

Ho unCome usare SortedMap Interface in Java?

map<Float, MyObject> 

Qual è il modo migliore per tenere la mappa ordinati in base al galleggiante.
È la SortedMap la migliore risposta? TreeMap? Come lo uso?

(creo solo la mappa e una volta sostituire il MyObject usando frequentemente myMap.put(), myMap.get())

+0

Ma SortedMap è un'interfaccia. TreeMap implementa SortedMap. –

+0

Vedere la risposta inviata da '@ user157196' qui http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – Bitmap

+0

Cerca Tom Jefferys ' answer – JohnnyLambada

risposta

59

userei TreeMap, che implementa SortedMap. È progettato esattamente per quello.

Esempio:

Map<Integer, String> map = new TreeMap<Integer, String>(); 

// Add Items to the TreeMap 
map.put(1, "One"); 
map.put(2, "Two"); 
map.put(3, "Three"); 

// Iterate over them 
for (Map.Entry<Integer, String> entry : map.entrySet()) { 
    System.out.println(entry.getKey() + " => " + entry.getValue()); 
} 

Vedere le Java tutorial page for SortedMap.
E here a list of tutorials correlati a TreeMap.

+0

Perché si esegue 'new Integer (n)' invece del solo numero intero nudo? –

+0

@Adam_G Nessun motivo particolare, immagino che quando ho scritto questa risposta non ero abituato al boxing automatico (?). – Barth

3

TreeMap, che è un'implementazione dell'interfaccia SortedMap, avrebbe funzionato.

Come si usa?

Map<Float, MyObject> map = new TreeMap<Float, MyObject>(); 
34

Una TreeMap è probabilmente il modo più semplice per farlo. Lo usi esattamente come una normale mappa.

cioè

Map<Float,String> mySortedMap = new TreeMap<Float,MyObject>(); 
    // Put some values in it 
    mySortedMap.put(1.0f,"One"); 
    mySortedMap.put(0.0f,"Zero"); 
    mySortedMap.put(3.0f,"Three"); 

    // Iterate through it and it'll be in order! 
    for(Map.Entry<Float,String> entry : mySortedMap.entrySet()) { 
     System.out.println(entry.getValue()); 
    } // outputs Zero One Three 

Vale la pena dare un'occhiata alla documentazione API, http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html per vedere che cosa altro si può fare con esso.

+0

IMHO questo è migliore della risposta accettata – Kawu

2

TreeMap ordina per l'ordinamento naturale chiave. Le chiavi dovrebbero implementare Comparable o essere compatibili con un Comparator (se hai passato un'istanza al costruttore). Nel tuo caso, Float implementa già Comparable in modo da non dover fare nulla di speciale.

È possibile chiamare keySet per recuperare tutte le chiavi in ​​ordine crescente.

9

È possibile utilizzare TreeMap che implementa internamente la SortedMap sotto è l'esempio

Ordinamento crescente ordinamento:

Map<Integer,String> ascsortedMAP = new TreeMap<Integer,String>(); 

    ascsortedMAP.put(8, "name8"); 
    ascsortedMAP.put(5, "name5"); 
    ascsortedMAP.put(15, "name15"); 
    ascsortedMAP.put(35, "name35"); 
    ascsortedMAP.put(44, "name44"); 
    ascsortedMAP.put(7, "name7"); 
    ascsortedMAP.put(6, "name6"); 

    for(Map.Entry<Integer, String> mapData : ascsortedMAP.entrySet()) { 
    System.out.println("Key : " +mapData.getKey()+ "Value : "+mapData.getValue()); 
    } 

Ordinamento ordine decrescente:

//Create the map and provide the comparator as a argument 
    Map<Integer,String> dscsortedMAP = new TreeMap<Integer,String>(new Comparator<Integer>() 
    { 
     @Override 
     public int compare(Integer o1, Integer o2) {     
      return o2.compareTo(o1); 
     } 
    }); 
    dscsortedMAP.putAll(ascsortedMAP); 

     for(Map.Entry<Integer, String> mapData : dscsortedMAP.entrySet()) { 
     System.out.println("Key : " +mapData.getKey()+" Value : "+mapData.getValue()); 
     } 

per ulteriori informazioni su SortedMAP leggere http://examples.javacodegeeks.com/core-java/util/treemap/java-sorted-map-example/

+0

Preferirei questa risposta poiché sta facendo ciò per cui SortedMap è stato progettato usando il comparatore – CodeToLife