treeset java tutorial with programming examples
Ten samouczek wyjaśnia wszystko o klasie TreeSet, implementacji, iteracji, zestawie TreeSet Vs HashSet, przykładach zestawów TreeSet w języku Java itp .:
TreeSet w Javie implementuje interfejs Set (dokładniej SortedSet). TreeSet wykorzystuje wewnętrznie TreeMap do przechowywania danych. Domyślnie obiekty lub elementy TreeSet są przechowywane zgodnie z naturalną kolejnością w kolejności rosnącej.
Klasa TreeSet, która implementuje TreeSet w języku Java, implementuje interfejs „NavigableSet”, a także dziedziczy klasę AbstractSet.
=> Zajrzyj tutaj, aby zobaczyć A-Z samouczków szkoleniowych Java tutaj.
Czego się nauczysz:
TreeSet w Javie
Należy zauważyć, że elementy TreeSet można również jawnie uporządkować, udostępniając dostosowany komparator w czasie tworzenia obiektu TreeSet przy użyciu określonego prototypu konstruktora.
Poniżej podano niektóre z ważnych cech TreeSet:
- Klasa TreeSet implementuje interfejs SortedSet. Nie zezwala na zduplikowane elementy.
- Klasa TreeSet nie jest zsynchronizowana.
- TreeSet nie zachowuje kolejności wstawiania, ale elementy w TreeSet są sortowane zgodnie z naturalną kolejnością.
- TreeSet można zamówić przy użyciu niestandardowego komparatora podczas tworzenia obiektu TreeSet.
- TreeSet jest zwykle używany do przechowywania ogromnych ilości informacji, które są naturalnie posortowane. Pomaga to w łatwym i szybszym dostępie.
Deklaracja klasy TreeSet
Java udostępnia klasę o nazwie „TreeSet”, która zawiera funkcjonalność struktury danych TreeSet. Klasa TreeSet jest częścią pakietu java.util.
Aby dołączyć klasę TreeSet do programu Java, powinniśmy użyć instrukcji import, jak podano poniżej:
import java.util.TreeSet;
lub
import java.util.*;
Ogólna deklaracja klasy TreeSet to:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Jak widać z deklaracji klasy, klasa TreeSet rozszerza AbstractSet i implementuje interfejsy NavigableSet, Cloneable i Serializable.
Poniżej przedstawiono hierarchię klas dla klasy TreeSet:
Wdrożenie wewnętrzne
Wiemy, że TreeSet implementuje interfejs NavigableSet i rozszerza klasę SortedSet.
Wewnętrznie konstruktor TreeSet jest zdefiniowany w następujący sposób:
public TreeSet() { this(new TreeMap()); }
Jak widać w powyższej definicji konstruktora TreeSet, wywoływany jest obiekt TreeMap. Zatem wewnętrznie jest to obiekt TreeMap zaimplementowany dla zestawu TreeSet. Dlatego podczas dodawania elementu do TreeSet, klucz jest dodawany do TreeMap, w którym klucze są domyślnie sortowane.
Jak na Dokumentacja Oracle w TreeSet ,
„TreeSet to implementacja NavigableSet oparta na TreeMap”.
Przykład Java TreeSet
Poniższy program w języku Java przedstawia prosty przykład demonstrujący zestaw TreeSet. W tym programie zdefiniowaliśmy prosty zestaw drzewa kolorów. Dodajemy do niego elementy, a następnie wyświetlamy. Zwróć uwagę, że elementy są wyświetlane zgodnie z naturalną kolejnością.
import java.util.*; class Main{ public static void main(String args()){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Wynik:
Zawartość TreeSet:
Niebieski Zielony Czerwony Żółty
Iteruj przez TreeSet
Aby uzyskać dostęp do poszczególnych elementów TreeSet, musimy iterować przez TreeSet lub innymi słowy, przejść przez TreeSet.
Robimy to, deklarując Iterator dla TreeSet, a następnie używamy tego Iteratora, aby uzyskać dostęp do każdego elementu. W tym celu używamy metody next () iteratora, która zwraca następny element w TreeSet.
Poniższy program Java demonstruje użycie Iteratora do iteracji przez TreeSet.
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String() args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
Wynik:
TreeSet: (5, 10, 15, 20, 25)
TreeSet za pomocą Iteratora: 5, 10, 15, 20, 25,
qtp wywiad pytania i odpowiedzi pdf
TreeSet Comparator w Javie
Domyślnie TreeSet jest uporządkowany w sposób naturalny. Możemy również sortować TreeSet w niestandardowej kolejności, definiując nową klasę porównawczą. W tej klasie porównawczej musimy przesłonić metodę „porównaj”, aby posortować elementy TreeSet. Ten obiekt porównawczy jest następnie przesyłany do konstruktora TreeSet.
Poniższy program Java pokazuje użycie komparatora do sortowania TreeSet.
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String() args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
Wynik:
TreeSet: (Pune, Indore, Hyderabad, Bangaluru)
Powyższy program implementuje klasę Comparator do sortowania danego TreeSet alfabetycznie w odwrotnej kolejności.
Zalecana lektura = >> Interfejs Java Comparator
TreeSet API / metody i konstruktory
W tej sekcji omówimy API klasy TreeSet. Tutaj omówimy konstruktory i metody dostarczane przez klasę TreeSet.
TreeSet udostępnia przeciążone konstruktory do konstruowania obiektu TreeSet.
Tabelaryzowaliśmy te konstruktory w następujący sposób:
Konstruktorzy
Prototyp konstruktora | Opis | |
---|---|---|
zawiera | boolean zawiera (obiekt o) | Sprawdza, czy TreeSet zawiera podany element; prawdziwe, jeśli obecne. |
TreeSet () | Domyślny konstruktor do tworzenia nowego, pustego obiektu TreeSet. | |
TreeSet (kolekcja c) | Tworzy nowy obiekt TreeSet zawierający elementy z danej kolekcji c, posortowane zgodnie z naturalną kolejnością. | |
TreeSet (Komparator) | Konstruuje nowy obiekt TreeSet, który jest pusty i zostanie posortowany zgodnie z określonym komparatorem. | |
TreeSet (SortedSet s) | Tworzy nowy obiekt TreeSet, który zawiera elementy z podanych sortSet s. |
Metody
Następnie przedstawmy tabelarycznie różne metody udostępniane przez klasę TreeSet.
metoda | Prototyp metody | Opis |
---|---|---|
Dodaj | add boolean (E e) | Dodaje dany element do TreeSet, jeśli jeszcze go tam nie ma. |
dodać wszystko | boolean addAll (kolekcja c) | Dodaje wszystkie elementy z danej kolekcji c do zestawu. |
sufit | Pułap E (E e) | Zwraca element większy lub równy e (najmniejszy element); lub null, jeśli nie ma elementu. |
jasny | void clear () | Usuwa wszystkie elementy z TreeSet. |
klon | Klon obiektu () | Zwraca płytką kopię obiektu TreeSet. |
komparator | Komparator porównawczy () | Zwraca komparator dla TreeSet lub null, jeśli używana jest kolejność naturalna. |
descendingIterator | Iterator malejącoIterator () | Zwraca malejący iterator po elementach w TreeSet. |
descendingSet | NavigableSet descendingSet () | Zwraca widok elementów w TreeSet w odwrotnej kolejności. |
pierwszy | E pierwszy () | Zwraca pierwszy lub najniższy element w TreeSet. |
podłoga | E piętro (E e) | Zwraca element, który jest mniejszy lub równy danemu elementowi e w TreeSet. Zwraca null, jeśli nie ma takiego elementu. |
Zestaw słuchawkowy | SortedSet headSet (E toElement) | zwraca zestaw elementów, które są ściśle mniejsze niż podane toElement |
NavigableSet headSet (E toElement, włącznie z wartością logiczną) | Zwraca zestaw elementów, które są równe (jeśli włącznie = true) lub mniejsze niż podane toElement. | |
wyższy | E wyżej (E e) | Zwraca najmniejszy element w tym zestawie, ściśle większy niż podany element, lub null, jeśli nie ma takiego elementu. |
jest pusty | boolean isEmpty () | Sprawdza, czy zestaw TreeSet jest pusty. Zwraca wartość true, jeśli jest pusta. |
iterator | Iterator iterator () | Zwraca iterator (w kolejności rosnącej) dla TreeSet. |
ostatni, ubiegły, zeszły | E ostatni () | Zwraca najwyższy lub ostatni element w TreeSet. |
niższy | E niższa (E e) | Zwraca element (największy element), który jest ściśle mniejszy niż dany element e w zestawie TreeSet. |
pollFirst | E pollFirst () | Usuwa i zwraca pierwszy (najniższy) element zestawu; null, jeśli zestaw jest pusty. |
ankietaLast | E ankietaLast () | Usuwa i zwraca ostatni (największy) element zestawu; null, jeśli ustawione puste. |
usunąć | boolean remove (Object o) | Usuwa dany element z zestawu. |
rozmiar | rozmiar int () | Zwraca rozmiar lub liczbę elementów obecnych w TreeSet. |
subSet | NavigableSet podzbiór (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Zwraca widok elementów od fromElement do toElement. |
SortedSet subSet (E fromElement, E toElement) | Zwraca elementy widoku od fromElement (włącznie) do toElement (wyłącznie). | |
tailSet | SortedSet tailSet (E fromElement) | Zwraca widok zawierający elementy, które są większe lub równe podanemu fromElement. |
NavigableSet tailSet (E fromElement, włącznie z wartością logiczną) | Zwraca widok elementów równych (jeśli włączone jest true) lub większych niż fromElement. |
TreeSet w Javie 8
Należy pamiętać, że w przypadku TreeSet nie ma większych zmian w wersji Java 8. Wszystkie metody i konstruktory działają w Javie 8 i nowszych wersjach.
Implementacja TreeSet w Javie
Poniższy program Java implementuje większość metod TreeSet omówionych powyżej.
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String() args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
Wynik:
Zawartość zestawu drzewka: 10 15 25 30 35
sufit (25): 25
piętro (25): 25
TreeSet zawiera (15): true
Rozmiar zestawu drzewek: 5
TreeSet Pierwszy element: 10
TreeSet Ostatni element: 35
Element 30 został usunięty z TreeSet
TreeSet po usunięciu (): 10 15 25 35
Rozmiar TreeSet po usunięciu (): 4
Zestaw słuchawkowy: (10, 15, 25)
Drzewo Ustaw rozmiar po wyczyszczeniu (): 0
W powyższym programie definiujemy obiekt TreeSet, a następnie dodajemy do niego elementy metodą „add”. Następnie definiujemy ArrayList. Następnie dodajemy elementy ArrayList do TreeSet przy użyciu metody „addAll”. Później pokazujemy różne metody TreeSet, takie jak Iterator, sufit, podłoga, pierwsza, ostatnia, zawiera, rozmiar, isEmpty itp.
TreeSet Vs HashSet
Sprawdźmy niektóre różnice między TreeSet i HashSet.
TreeSet | HashSet |
---|---|
Elementy zamawiane są według naturalnego zamówienia. | Elementy nie są zamawiane. |
Zajmuje O (log N) czasu na operacje takie jak wstawianie, usuwanie i wyszukiwanie, dzięki czemu działa wolniej niż TreeSet. | Zajmuje stały czas na podstawowe operacje, takie jak wstawianie, usuwanie i wyszukiwanie, dzięki czemu jest szybsze niż TreeSet. |
Nie zezwala na obiekty puste. | Zezwala na obiekt zerowy. |
Używa metody compareTo () do porównania dwóch obiektów. | Używa metody compare () i equals () do porównania dwóch obiektów. |
Wdrożone wewnętrznie przy użyciu Navigable TreeMap. | Wdrożone wewnętrznie przy użyciu HashMap. |
Posiada bogate funkcje API, które mogą wykonywać różne manipulacje. | Funkcjonalność API HashSet jest raczej ograniczona. |
Często Zadawane Pytania
P # 1) Co to jest zestaw drzew?
Odpowiedź: TreeSet to implementacja SortedSet, która nie zezwala na zduplikowane wartości. Elementy w TreeSet są domyślnie sortowane w kolejności rosnącej.
Pytanie nr 2) Jak dodać elementy do TreeSet w Javie?
Odpowiedź: TreeSet udostępnia metodę add, która służy do dodawania określonego elementu do TreeSet. Udostępnia również metodę „addAll”. Ta metoda akceptuje dowolną inną kolekcję jako argument, a następnie dodaje wszystkie elementy tej kolekcji do TreeSet.
Pytanie nr 3) Czy TreeSet jest bezpieczny dla wątków?
Odpowiedź: Nie. TreeSet nie jest bezpieczny dla wątków. Dlatego powinniśmy zadbać o to, jak działamy TreeSet w środowisku wielowątkowym.
Pytanie 4) Czy TreeSet może mieć duplikaty?
Odpowiedź: Nie. TreeSet nie zezwala na duplikaty.
Pytanie nr 5)Czy TreeSet zezwala na null w Javie?
Odpowiedź: Tak. W TreeSet możemy mieć puste elementy.
Wniosek
To kończy nasz samouczek dotyczący TreeSet. TreeSet to implementacja SortedSet, która nie zezwala na duplikaty, ale dopuszcza wartości null. Elementy w TreeSet są domyślnie sortowane zgodnie z naturalną kolejnością w kolejności rosnącej.
Widzieliśmy już podstawy klasy TreeSet wraz z jej deklaracją oraz różnymi konstruktorami i metodami.
W naszych kolejnych samouczkach omawiamy pozostałe klasy kolekcji Java.
=> Obejrzyj serię prostych szkoleń dotyczących języka Java.
rekomendowane lektury
- Drzewo wyszukiwania binarnego w Javie - przykłady implementacji i kodu
- TreeMap w Javie - samouczek z przykładami TreeMap w języku Java
- Co to jest wektor Java | Samouczek klasy wektorowej Java z przykładami
- Samouczek klasy skanera Java z przykładami
- Java Array Class Tutorial - klasa java.util.Arrays z przykładami
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Java String zawiera () Samouczek dotyczący metody z przykładami
- Postrzępiona tablica w Javie - samouczek z przykładami