2011-09-15 12 views
46

MamJak korzystać z interfejsu SortedMap w Javie?

map<Float, MyObject> 

Jaki jest najlepszy sposób, aby utrzymać mapę posortowane według pływaka.
Czy najlepsza odpowiedź to SortedMap? TreeMap? Jak z niego korzystać?

(I tylko stworzyć mapę raz wymienić MyObject często korzystając myMap.put(), myMap.get())

+0

Ale SortedMap to interfejs. TreeMap implementuje SortedMap. –

+0

Zobacz odpowiedź opublikowaną przez '@ user157196' tutaj http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – Bitmap

+0

Szukaj Tom Jefferys ' odpowiedź – JohnnyLambada

Odpowiedz

59

byłoby użyć TreeMap, który realizuje SortedMap. Jest przeznaczony dokładnie do tego.

przykład:

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()); 
} 

Patrz Java tutorial page for SortedMap.
I here a list of tutorials związane z TreeMap.

+0

Dlaczego robisz 'new Integer (n)' zamiast samej gołej liczby całkowitej? –

+0

@Adam_G Bez specjalnego powodu, myślę, że kiedy napisałem tę odpowiedź, nie byłem przyzwyczajony do auto-boxingu (?). – Barth

3

TreeMap, która jest implementacją interfejsu SortedMap, będzie działać.

Jak z niego korzystać?

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

Mapa drzewa jest prawdopodobnie najprostszym sposobem robienia tego. Używasz go dokładnie tak, jak normalnej mapy.

tj

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 

Warto przyjrzeniu docs API http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html aby zobaczyć, co jeszcze można zrobić z nim.

+0

IMHO ten jest lepszy niż zaakceptowana odpowiedź – Kawu

2

TreeMap sortuje według klucza naturalnego uporządkowania. Klucze powinny implementować Comparable lub być kompatybilne z Comparator (jeśli przekazałeś jedną instancję konstruktorowi). W twoim przypadku Float implementuje już Comparable, więc nie musisz robić nic specjalnego. Aby uzyskać wszystkie klucze w porządku rosnącym, można zadzwonić pod numer keySet.

9

Można użyć TreeMap który wewnętrznie realizuje poniżej SortedMap jest przykładem

Sortowanie według rosnącej zamawiającego:

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()); 
    } 

Sortowanie według malejącej zamawiającego:

//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()); 
     } 

dla dalsze informacje o SortedMAP przeczytać http://examples.javacodegeeks.com/core-java/util/treemap/java-sorted-map-example/

+0

Wolałbym tę odpowiedź, ponieważ robi to, co zostało zaprojektowane dla SortedMap przy użyciu Komparatora – CodeToLife

Powiązane problemy