treemap java tutorial with java treemap examples
Ten samouczek Java TreeMap omawia klasę TreeMap, iterację, przykłady TreeMap, implementację, Java Hashmap vs Treemap, metody TreeMap API itp .:
Struktura danych TreeMap to kolekcja przechowująca pary klucz-wartość w naturalnie posortowanej kolejności. TreeMap jest częścią Java Collections Framework i jest implementacją mapy.
=> Sprawdź WSZYSTKIE samouczki Java tutaj.
Czego się nauczysz:
Java TreeMap
Niektóre z głównych cech TreeMap w Javie są następujące:
- Klasa TreeMap, która implementuje mapę drzewa w Javie, jest częścią pakietu java.util. Implementuje interfejs Map.
- Klasa TreeMap stanowi rozszerzenie klasy AbstractMap, a także implementuje (pośrednio) interfejs NavigableMap i SortedMap.
- TreeMap nie jest zsynchronizowana.
- Domyślnie elementy TreeMap są w porządku rosnącym.
- TreeMap nie zezwala na zduplikowane elementy.
- TreeMap zezwala na wartości null, ale nie na klucze o wartości null.
Poniższy diagram przedstawia hierarchię klas dla klasy TreeMap.
Jak już wspomniano, klasa TreeMap implementuje interfejs NavigableMap, który z kolei rozszerza klasę SortedMap. SortedMap dalej dziedziczy interfejs mapy.
Deklaracja klasy TreeMap
Ogólna deklaracja klasy TreeMap jest podana poniżej:
public class TreeMap extends AbstractMap implements NavigableMap, Cloneable, Serializable
gdzie K => typ kluczy obsługiwanych przez TreeMap
V => typ mapowanych wartości
Przykład TreeMap
Poniższy program przedstawia prosty przykład struktury danych TreeMap.
import java.util.*; class Main{ public static void main(String args[]){ //declare a TreeMap and initialize it TreeMap cities_map=new TreeMap (); cities_map.put(100,'Pune'); cities_map.put(102,'Jaipur'); cities_map.put(101,'Hyderabad'); cities_map.put(103,'Bangaluru'); //print the TreeMap contents using forEach System.out.println('Contents of TreeMap:'); System.out.print('{'); for(Map.Entry entries:cities_map.entrySet()){ System.out.print(entries.getKey()+' = '+entries.getValue() + ' '); } System.out.println('}'); } }
Wynik:
Zawartość TreeMap:
{100 = Pune 101 = Hajdarabad 102 = Jaipur 103 = Bangaluru}
W tym programie zdefiniowaliśmy prosty obiekt TreeMap o nazwie cities_map, a następnie za pomocą metody put zainicjowaliśmy go na pary klucz-wartość.
Następnie używamy metody entrySet () klasy TreeMap i iterujemy po tym zestawie, używając pętli forEach do wypisywania par klucz-wartość. Do drukowania par klucz-wartość używamy odpowiednio metod getKey () i getValue ().
aplikacje do pobierania filmów z youtube
TreeMap API Methods & Constructors
W tej sekcji omówimy różne konstruktory i metody udostępniane przez klasę TreeMap.
Konstruktorzy
Prototyp konstruktora | Opis | |
---|---|---|
descendingMap | NavigableMap descendingMap () | Zwraca podane pary klucz-wartość w odwrotnej kolejności. |
TreeMap () | Domyślny konstruktor do tworzenia pustej TreeMap z naturalnym porządkiem. | |
TreeMap (komparator) | Tworzy pustą TreeMap, która jest sortowana na podstawie określonego komparatora. | |
TreeMap (Mapa m) | Konstruuje TreeMap i inicjalizuje ją elementami określonej mapy, m. Porządkowanie jest naturalne. | |
TreeMap (SortedMap m) | Konstruuje TreeMap i inicjalizuje go wpisami SortedMap. Kolejność przebiega tak samo, jak sortowana mapa. |
Metody
metoda | Prototyp metody | Opis |
---|---|---|
sufitEntry | Mapa Sufit wejściowy Wejście (klawisz K) | Zwraca najmniejszą parę klucz-wartość, taką że klucz jest większy lub równy podanemu kluczowi; null, jeśli nie ma klucza |
sufitKey | Klawisz K sufit (klawisz K) | Zwraca klucz, który jest najmniejszy i większy niż podany klucz; zwraca null, jeśli nie ma klucza. |
jasny | void clear () | Usuwa wszystkie pary klucz-wartość z mapy drzewa. |
klon | Klon obiektu () | Tworzy płytką kopię instancji TreeMap. |
komparator | Komparator porównawczy () | Zwraca komparator używany do rozmieszczania kluczy. null, jeśli zamawianie jest naturalne |
descendingKeySet | NavigableSet descendingKeySet () | Zwraca widok NavigableSet kluczy TreeMap w odwrotnej kolejności. |
firstEntry | Map.Entry firstEntry () | Zwraca najmniejszą parę klucz-wartość. |
floorEntry | Mapa Wejście na piętro Wejście (klawisz K) | Zwraca największy klucz, który jest mniejszy lub równy podanemu kluczowi; null, jeśli nie ma takiego klucza |
dla każdego | void forEach (akcja BiConsumer) | Dana akcja jest wykonywana dla każdego wpisu w TreeMap. |
headMap | SortedMap headMap (K toKey) | Służy do zwracania pary klucz-wartość takiej, że zwracany klucz jest ściśle mniejszy niż toKey |
headMap | NavigableMap headMap (K toKey, włącznie z wartością logiczną) | Zwraca pary klucz-wartość tych kluczy, które są mniejsze niż toKey lub równe, jeśli włącznie. |
wyższyEntry | Mapa Wejdź wyżej Wejście (klawisz K) | Zwraca najmniejszy klucz lub null. Zwrócony klucz jest ściśle większy niż podany klucz. |
wyższaKey | K wyższy Klawisz (klawisz K) | Zwraca klucz, jeśli mapowanie jest obecne dla danego klucza w mapie drzewa. |
zestaw kluczy | Ustaw keySet () | Zwraca kolekcję zestawów kluczy w TreeMap. |
Ostatni wpis | Map.Entry lastEntry () | Zwraca parę klucz-wartość w taki sposób, że klucz jest największym kluczem. Zwraca null, jeśli klucz nie istnieje. |
lowerEntry | Map.Entry lowerEntry (klawisz K) | Zwraca parę klucz-wartość w taki sposób, że klucz jest największy i ściśle mniejszy niż podany klucz. Zwraca null, jeśli klucz nie istnieje. |
lowerKey | K lowerKey (klawisz K) | Zwraca największy klucz lub null. Zwrócony klucz jest mniejszy niż podany klucz. |
navigableKeySet | NavigableSet navigableKeySet () | Zwraca „NavigableSet” kluczy w TreeMap. |
pollFirstEntry | Map.Entry pollFirstEntry () | Usuwa, a następnie zwraca najmniejszą parę klucz-wartość. |
pollLastEntry | Map.Entry pollLastEntry () | Usuwa i zwraca największą parę klucz-wartość. |
położyć | V put (klawisz K, wartość V) | Dodaje podany klucz i wartość do TreeMap. |
połóż wszystko | void putAll (Mapa mapy) | Wszystkie pary klucz-wartość z danej mapy są kopiowane do TreeMap. |
zastąpić | Zastąp V (klawisz K, wartość V) | Zastępuje lub zmienia wartość danego klucza na podaną wartość. |
zastąpić | boolean replace (klawisz K, V oldValue, V newValue) | Zastępuje oldValue podanego klucza nową wartością. |
Zamień wszystko | void replaceAll (funkcja BiFunction) | Wywołuje daną funkcję i zastępuje wszystkie wpisy wynikiem funkcji. |
subMap | Mapa podrzędna mapy nawigacyjnej (K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) | Zwraca pary klucz-wartość kluczy od „fromKey” do „toKey”. |
SortedMap | SortedMap SubMap (K fromKey, K toKey) | Zwraca pary klucz-wartość dla zakresu odKey (włącznie) do toKey (wyłącznie). |
tailMap | SortedMap tailMap (K fromKey) | Zwraca pary klucz-wartość takie, że klucze są większe lub równe fromKey. |
tailMap | NavigableMap tailMap (K fromKey, włącznie z wartością logiczną) | Zwraca pary klucz-wartość dla kluczy równych fromKey (włącznie = true) lub większych niż fromKey. |
zawieraKlucz | boolean containsKey (klucz obiektu) | Sprawdza, czy istnieje mapowanie dla danego klucza w mapie drzewa. Zwraca wartość true, jeśli tak. |
zawieraValue | boolean zawieraValue (wartość obiektu) | Sprawdza, czy istnieje klucz zmapowany z podaną wartością. Zwraca tak, jeśli prawda. |
firstKey | K firstKey () | Zwraca najniższy klucz lub pierwszy klucz w posortowanej mapie |
otrzymać | V get (klucz obiektu) | Pobiera wartość zamapowaną na podany klucz |
lastKey | K lastKey () | Zwraca ostatni klucz lub najwyższy klucz w posortowanej mapie. |
usunąć | V usuń (klucz obiektu) | Usuwa parę klucz-wartość dla danego klucza w TreeMap |
entrySet | Zestaw | Zwraca zestaw dla danej TreeMap. |
rozmiar | rozmiar int () | Zwraca rozmiar lub całkowitą liczbę par klucz-wartość w TreeMap. |
wartości | Wartości kolekcji () | Zwraca kolekcję wartości dla TreeMap. |
Iteracja przez TreeMap
TreeMap składa się z par klucz-wartość. Klasa TreeMap udostępnia metodę „entrySet”, która zwraca na mapie pary klucz-wartość. Możemy iterować te wpisy za pomocą pętli forEach i wyświetlać klucze i wartości, używając odpowiednio metod getKey () i getValue ().
Jest to pokazane w poniższym programie Java:
import java.util.Map; import java.util.TreeMap; class Main { public static void main(String[] arg){ //declare and initialize TreeMap Map colorsTree = new TreeMap(); colorsTree.put('R', 'Red'); colorsTree.put('G', 'Green'); colorsTree.put('B', 'Blue'); colorsTree.put('M', 'Magenta'); System.out.println('The contents of TreeMap:'); // retrieve set of map entries using entrySet method for (Map.Entry Map_entry : colorsTree.entrySet()) //print key-value pairs using getKey() and getValue() System.out.println( '[' + Map_entry.getKey() + '=>' + Map_entry.getValue() + ']'); } }
Wynik:
Zawartość TreeMap:
[B => niebieski]
[G => zielony]
[M => magenta]
[R => czerwony]
Implementacja TreeMap w Javie
Poniższy program w języku Java demonstruje główną metodę klasy TreeMap omówioną powyżej.
import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; public class Main { public static void main(String[] args) { //declare a TreeMap Object and initialize it with values TreeMap map = new TreeMap<>(); for(int i=1;i<=10;i++) { map.put(i, (i*i)+''); } System.out.println('Original Map:' + map); //lowerEntry, higherEntry Entry entry = map.lowerEntry(4); System.out.println('Closest Lower Entry than 4:'+entry); entry = map.higherEntry(4); System.out.println('Closest Higher Entry than 4:'+entry); System.out.println('Closest Lower key than 4 :'+map.lowerKey(4)); entry = map.floorEntry(6); System.out.println('Closest floor entry than 6: '+entry); entry = map.ceilingEntry(6); System.out.println('Closest ceiling Entry than 6 :'+entry); entry = map.firstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.lastEntry(); System.out.println('TreeMap Last Entry:'+entry); Map reversedMap = map.descendingMap(); System.out.println('Reversed TreeMap: '+reversedMap); //pollFirstEntry, pollLastEntry entry = map.pollFirstEntry(); System.out.println('TreeMap First Entry:'+entry); entry = map.pollLastEntry(); System.out.println('TreeMap Last Entry:'+entry); //subMap Map subMap = map.subMap(2, true, 6, true); System.out.println('Submap from 2 to 6: '+subMap); //headMap subMap = map.headMap(5, true); System.out.println('HeadMap: '+subMap); //tailMap subMap = map.tailMap(5, true); System.out.println('TailMap: '+subMap); } }
Wynik:
Oryginalna mapa: {1 = 1, 2 = 4, 3 = 9, 4 = 16, 5 = 25, 6 = 36, 7 = 49, 8 = 64, 9 = 81, 10 = 100}
Najbliższe niższe wejście niż 4: 3 = 9
Najbliższe wyższe wejście niż 4: 5 = 25
Najbliższy niższy klawisz niż 4: 3
Najbliższe wejście na piętro niż 6: 6 = 36
Najbliższe wejście do sufitu niż 6: 6 = 36
TreeMap First Entry: 1 = 1
TreeMap Ostatni wpis: 10 = 100
Odwrócona mapa drzewa: {10 = 100, 9 = 81, 8 = 64, 7 = 49, 6 = 36, 5 = 25, 4 = 16, 3 = 9, 2 = 4, 1 = 1}
TreeMap First Entry: 1 = 1
TreeMap Ostatni wpis: 10 = 100
Podmapa od 2 do 6: {2 = 4, 3 = 9, 4 = 16, 5 = 25, 6 = 36}
Mapa głowy: {2 = 4, 3 = 9, 4 = 16, 5 = 25}
TailMap: {5 = 25, 6 = 36, 7 = 49, 8 = 64, 9 = 81}
Sortuj mapę drzewa według wartości
Domyślnie TreeMap jest sortowane na podstawie kluczy zgodnie z naturalną kolejnością. Ale jeśli chcemy posortować TreeMap według wartości, musimy skorzystać z komparatora, aby zdefiniować sortowanie.
Poniższy program Java sortuje TreeMap według wartości.
import java.util.*; class Main { //Method for sorting the TreeMap based on values public static > Map sortTreeMap(final Map map) { //define a comaprator to sort TreeMap on values Comparator valueComparator = new Comparator() { public int compare(K k1, K k2) { int compare = map.get(k1).compareTo(map.get(k2)); if (compare == 0) return 1; else return compare; } }; //use the comparator to sort the TreeMap and return sortedTreeMap Map sortedTreeMap = new TreeMap(valueComparator); sortedTreeMap.putAll(map); return sortedTreeMap; } public static void main(String args[]) { //define and initialize the TreeMap TreeMap treemap = new TreeMap(); treemap.put('R', 'Red'); treemap.put('G', 'Green'); treemap.put('B', 'Blue'); treemap.put('C', 'Cyan'); treemap.put('M', 'Magenta'); // call method sortTreeMap to sort the TreeMap Map sortedTreeMap = sortTreeMap(treemap); // Retrieve set of the entries on the sorted map Set set = sortedTreeMap.entrySet(); System.out.println('The sorted TreeMap based on Values:'); // Now define iterator on this set Iterator i = set.iterator(); // Print TreeMap elements while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } } }
Wynik:
Posortowana mapa drzewa oparta na wartościach:
B: niebieski
C: cyjan
G: zielony
M: magenta
R: czerwony
css pytania do wywiadu i odpowiedzi dla doświadczonych
Java Hashmap vs Treemap
Zobaczmy niektóre z głównych różnic między HashMap a TreeMap.
Poniższa tabela pokazuje te różnice.
HashMap | TreeMap |
---|---|
HashMap jest znacznie szybszy niż TreeMap. | TreeMap działa wolniej |
Implementuje interfejs Map. | Implementuje interfejs NavigableMap. |
Wykorzystuje technikę implementacji skrótu | Do implementacji użyj czerwono-czarnego drzewa |
Nie zachowuje kolejności elementów zawierających elementy | Klucze na mapie drzewa są już uporządkowane zgodnie z naturalnym porządkiem |
Zezwala na jeden klucz pusty i wiele wartości null | Zezwala tylko na wartości null, ale klucze nie mogą być puste |
Wykonuje podstawowe operacje, umieszcza i pobiera w stałym czasie. | Poświęć log (n) czas na wykonanie operacji put i get |
HashMap ma ograniczoną funkcjonalność. | Klasa TreeMap zapewnia wiele dodatkowych funkcji, które pomagają nam manipulować strukturą danych. |
Używa metody equals () do porównania. | Używa metody compareTo () do porównania. |
Często Zadawane Pytania
Pytanie 1) Co to jest TreeMap w Javie?
Odpowiedź: TreeMap w Javie to zbiór par klucz-wartość, które są już posortowane. Do implementacji wykorzystuje czerwono-czarne drzewo. Java TreeMap implementuje interfejs NavigableMap oprócz interfejsu Map, a także rozszerza klasę AbstractMap.
Pytanie nr 2) Dlaczego używamy TreeMap w Javie?
Odpowiedź: TreeMap jest używany w Javie do implementacji interfejsów Map i NavigableMap oraz klasy AbstractMap. Ponieważ klucze TreeMap są sortowane zgodnie z naturalną kolejnością, możemy użyć tej struktury danych do przechowywania struktury katalogów, hierarchii drzew itp.
Pytanie nr 3) Co jest lepsze - HashMap czy TreeMap?
Odpowiedź: HashMap jest lepszy niż TreeMap. HashMap zawsze potrzebuje stałego czasu na wykonanie podstawowych operacji, podczas gdy TreeMap potrzebuje czasu log (n) na wykonanie tych operacji. W przypadku większych obiektów danych HashMap działa szybciej w porównaniu z TreeMap.
Pytanie 4) Czy TreeMap jest posortowane?
Odpowiedź: Tak, kluczowe wpisy w TreeMap są sortowane według naturalnego porządku. Klasa TreeMap umożliwia także użycie niestandardowego komparatora do sortowania TreeMap na podstawie wartości.
Pytanie nr 5) Czy TreeMap jest bezpieczne dla wątków?
Odpowiedź: Nie, TreeMap nie jest kolekcją bezpieczną dla wątków.
Wniosek
W tym samouczku szczegółowo omówiliśmy TreeMap w Javie. TreeMap to zbiór par klucz-wartość, który implementuje interfejs mapy. Implementuje również interfejs NavigableMap. Elementy TreeMap są unikalne i żadne duplikaty nie są dozwolone.
Widzieliśmy konstruktory i metody TreeMap. Zaimplementowaliśmy również program TreeMap i zademonstrowaliśmy główne metody klasy TreeMap. Następnie omówiliśmy różnice między HashMap i TreeMap.
=> Odwiedź tutaj, aby zobaczyć serię szkoleń Java dla wszystkich.
rekomendowane lektury
- TreeSet w Javie: samouczek z przykładami programowania
- Drzewo wyszukiwania binarnego w Javie - przykłady implementacji i kodu
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Java String zawiera () Samouczek dotyczący metody z przykładami
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- Postrzępiona tablica w Javie - samouczek z przykładami
- Samouczek klasy skanera Java z przykładami
- Samouczek dotyczący ciągów Java | Metody ciągów Java z przykładami