2012-12-07 21 views
9

Czy ktoś mógłby mi powiedzieć kiedy i dlaczego używać TREEMAP. Przeszedłem przez This link , ale nie znalazłem odpowiedzi.Dlaczego i kiedy używać TreeMap

Zgodnie z Moim zamysłem używamy treemap do sortowania danych według klucza i tego samego możemy osiągnąć również innymi sposobami.

+1

Istnieją inne sposoby, ale jest to najłatwiejsze. W jaki inny sposób proponujesz posortowanie par wartości klucza? – jlordo

+0

"Zgodnie z moim zamysłem używamy treemap do sortowania danych według klucza i tego samego możemy osiągnąć również innymi sposobami." - DOKŁADNIE! – xagyg

+0

@jlordo porównywalne i komparatory. –

Odpowiedz

4

TreeMap

czerwono-czarne drzewo realizacja NavigableMap oparty. Mapa jest sortowana według naturalnej kolejności jej kluczy lub komparatora dostarczonego w czasie tworzenia mapy, w zależności od tego, który konstruktor jest używany.

Ta implementacja zapewnia gwarantowany czas log (n) dla operacji containsKey, get, put i remove. Algorytmy są adaptacjami w Cormen, Leiserson i Rivest's Introduction to Algorithms.

Użyj tej struktury danych, kiedy trzeba zamawiać klucz nie tylko rosnąco można przekazać comparator konstruktorowi TreeMap(Comparator<? super K> comparator) napisać swoją własną logikę sortowania. Jest to również rodzaj samowyważącego drzewa binarnego wyszukiwania.

6

Jądro, do którego linkujesz, wyraźnie stwierdza, że ​​jest to implementacja interfejsów map i sorted. Używałbyś go, gdy potrzebujesz tej funkcji.

3

Jest to skuteczny sposób na sortowanie obiektów według klucza, a także dostęp losowy jest dla Ciebie ważny. Dzięki tej strukturze danych możesz dokonywać iteracji w kolejności.

Jeśli dostęp losowy nie jest potrzebny, należy raczej użyć posortowanego zestawu/torby lub listy.

Why is there no SortedList in Java?

14

Powiedzmy, że chcemy zaimplementować słownika i wydrukować je w kolejności alfabetycznej, można użyć kombinacji TreeMap i TreeSet:

public static void main(String args[]) { 
    Map<String, Set<String>> dictionary = new TreeMap<>(); 
    Set<String> a = new TreeSet<>(Arrays.asList("Actual", "Arrival", "Actuary")); 
    Set<String> b = new TreeSet<>(Arrays.asList("Bump", "Bravo", "Basic")); 

    dictionary.put("B", b); 
    dictionary.put("A", a); 

    System.out.println(dictionary); 
} 

Wszystko sortowanie odbywa się automatycznie i drukuje:

{A = [Actual Actuary, przybycia] B = [Podstawowe Bravo uderzały]}

Oczywiście mogłeś posortować struktury ręcznie, ale użycie TreeMap/Set może być bardziej wydajne, zmniejsza liczbę linii kodu (= liczba błędów) i jest bardziej czytelne.

Powiązane problemy