treeset java tutorial with programming examples
Tento výukový program vysvětluje vše o třídě TreeSet, implementaci, iteraci, TreeSet Vs HashSet, příklady Java TreeSet atd .:
TreeSet v Javě implementuje rozhraní Set (konkrétněji SortedSet). TreeSet interně používá TreeMap pro ukládání dat. Ve výchozím nastavení jsou objekty nebo prvky TreeSet ukládány podle přirozeného řazení ve vzestupném pořadí.
Třída TreeSet, která implementuje TreeSet v Javě, implementuje rozhraní „NavigableSet“ a dědí také třídu AbstractSet.
=> Podívejte se sem a podívejte se na A-Z výukových kurzů Java zde.
Co se naučíte:
TreeSet v Javě
Všimněte si, že prvky TreeSet lze také explicitně objednat poskytnutím přizpůsobeného komparátoru v době vytváření objektu TreeSet pomocí prototypu konkrétního konstruktoru.
Níže jsou uvedeny některé důležité vlastnosti TreeSet:
- Třída TreeSet implementuje rozhraní SortedSet. Nepovoluje duplicitní prvky.
- Třída TreeSet není synchronizována.
- TreeSet nezachová pořadí vložení, ale prvky v TreeSet jsou seřazeny podle přirozeného řazení.
- TreeSet lze objednat pomocí vlastního komparátoru při vytváření objektu TreeSet.
- TreeSet se běžně používá k ukládání obrovského množství informací, které jsou přirozeně tříděny. To napomáhá snadnému a rychlejšímu přístupu.
Deklarace třídy TreeSet
Java poskytuje třídu nazvanou „TreeSet“, která obsahuje funkce datové struktury TreeSet. Třída TreeSet je součástí balíčku java.util.
Chcete-li do programu Java zahrnout třídu TreeSet, měli bychom použít příkaz import, jak je uvedeno níže:
import java.util.TreeSet;
nebo
import java.util.*;
Obecná deklarace třídy TreeSet je:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Jak je patrné z deklarace třídy, třída TreeSet rozšiřuje AbstractSet a implementuje rozhraní NavigableSet, Cloneable a Serializable.
Hierarchie tříd pro třídu TreeSet je uvedena níže:
Interní implementace
Víme, že TreeSet implementuje rozhraní NavigableSet a rozšiřuje třídu SortedSet.
Interně je konstruktor TreeSet definován takto:
public TreeSet() { this(new TreeMap()); }
Jak je vidět ve výše uvedené definici konstruktoru TreeSet, je vyvolán objekt TreeMap. Interně tedy jde o objekt TreeMap, který je implementován pro TreeSet. Při přidávání prvku do TreeSet se tedy do TreeMap přidá klíč, ve kterém jsou klíče standardně tříděny.
Dle Dokumentace Oracle na TreeSet ,
'TreeSet je implementace NavigableSet založená na TreeMap.'
Příklad sady Java TreeSet
Následující program Java ukazuje jednoduchý příklad, který demonstruje TreeSet. V tomto programu jsme definovali jednoduchý Color TreeSet. Přidáme do něj prvky a poté je zobrazíme. Všimněte si, že prvky jsou zobrazeny podle přirozeného řazení.
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() + ' '); } } }
Výstup:
Obsah TreeSet:
Modrá Zelená Červená Žlutá
Iterovat prostřednictvím TreeSet
Pro přístup k jednotlivým prvkům TreeSet musíme iterovat přes TreeSet nebo jinými slovy procházet TreeSet.
Děláme to tak, že deklarujeme Iterátor pro TreeSet a poté použijeme tento Iterátor pro přístup ke každému prvku. K tomu použijeme metodu next () iterátoru, který vrátí další prvek v TreeSet.
Následující program Java demonstruje použití Iterátoru k iteraci přes 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(', '); } } }
Výstup:
Sada stromů: (5, 10, 15, 20, 25)
TreeSet pomocí Iterátoru: 5, 10, 15, 20, 25,
která certifikace testování softwaru je nejlepší
TreeSet Comparator v Javě
Ve výchozím nastavení je TreeSet přirozeně uspořádán. Můžeme také třídit TreeSet v přizpůsobeném pořadí definováním nové třídy komparátoru. V této třídě komparátoru musíme přepsat metodu „porovnání“, aby se seřadily prvky TreeSet. Tento komparátor je objekt předán konstruktoru TreeSet.
Následující program Java ukazuje použití komparátoru k třídění 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; } } } }
Výstup:
TreeSet: (Pune, Indore, Hyderabad, Bangaluru)
Výše uvedený program implementuje třídu Comparator k seřazení dané TreeSet abecedně v opačném pořadí.
Doporučené čtení = >> Rozhraní Java Comparator
TreeSet API / Metody a konstruktory
V této části probereme API třídy TreeSet. Zde budeme diskutovat o konstruktorech a metodách poskytovaných třídou TreeSet.
Třída TreeSet poskytuje přetížené konstruktory ke konstrukci objektu TreeSet.
Tabulkovali jsme tyto konstruktory následovně:
Konstruktéři
Prototyp konstruktoru | Popis | |
---|---|---|
obsahuje | boolean obsahuje (Objekt o) | Zkontroluje, zda TreeSet obsahuje daný prvek; true, pokud je k dispozici. |
TreeSet () | Výchozí konstruktor pro vytvoření nového prázdného objektu TreeSet. | |
TreeSet (kolekce c) | Vytvoří nový objekt TreeSet obsahující prvky z dané kolekce c, seřazené podle přirozeného řazení. | |
Sada stromů (Komparátor komparátor) | Vytvoří nový objekt TreeSet, který je prázdný a bude seřazen podle zadaného komparátoru. | |
TreeSet (SortedSet s) | Vytvoří nový objekt TreeSet, který obsahuje prvky z dané seřazené sady. |
Metody
Dále pojďme tabularizovat různé metody poskytované třídou TreeSet.
Metoda | Metoda Prototyp | Popis |
---|---|---|
přidat | boolean add (E e) | Přidá daný prvek do TreeSet, pokud tam ještě není. |
přidat vše | boolean addAll (kolekce c) | Přidá do sady všechny prvky v dané kolekci c. |
strop | E strop (E e) | Vrátí prvek větší nebo rovný e (nejmenší prvek); nebo null, pokud není přítomen žádný prvek. |
Průhledná | prázdnota clear () | Odstraní všechny prvky z TreeSet. |
klon | Klon objektu () | Vrátí mělkou kopii objektu TreeSet. |
komparátor | Komparátor komparátor () | Vrátí komparátor pro TreeSet nebo null, pokud je použito přirozené řazení. |
sestupněIterátor | Iterátor sestupněIterátor () | Vrátí sestupný iterátor nad prvky v TreeSet. |
sestupně | NavigableSet descendingSet () | Vrátí pohled na prvky v TreeSet v opačném pořadí. |
První | E první () | Vrátí první nebo nejnižší prvek v TreeSet. |
podlaha | E podlaha (E e) | Vrátí prvek, který je menší nebo roven danému prvku e v TreeSet. Vrátí hodnotu null, pokud žádný takový prvek neexistuje. |
sluchátka | SetedSet headSet (E toElement) | vrací sadu prvků, které jsou přísně menší než daný prvek |
NavigableSet headSet (E toElement, boolean inclusive) | Vrátí sadu prvků, které jsou rovny (pokud je zahrnuto = true) nebo menší než dané prvku. | |
vyšší | E vyšší (E e) | Vrátí nejmenší prvek v této sadě přísně větší než daný prvek, nebo null, pokud takový prvek neexistuje. |
je prázdný | boolean isEmpty () | Zkontroluje, zda je TreeSet prázdný. Vrátí hodnotu true, pokud je prázdná. |
iterátor | Iterátor iterátor () | Vrátí iterátor (ve vzestupném pořadí) pro TreeSet. |
poslední | E poslední () | Vrátí nejvyšší nebo poslední prvek v TreeSet. |
dolní | E nižší (E e) | Vrátí prvek (největší prvek), který je přísně menší než daný prvek e v TreeSet. |
hlasování | E hlasování První () | Odebere a vrátí první (nejnižší) prvek v sadě; null, pokud je sada prázdná. |
hlasováníposlední | E hlasováníPoslední () | Odebere a vrátí poslední (největší) prvek v sadě; null, pokud je nastaven prázdný. |
odstranit | boolean remove (Objekt o) | Odebere daný prvek ze sady. |
velikost | int velikost () | Vrátí velikost nebo počet prvků obsažených v TreeSet. |
podmnožina | Podmnožina NavigableSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Vrátí pohled na prvky v rozsahu od fromElement do toElement. |
Podmnožina SortedSet (E fromElement, E toElement) | Vrátí prvky zobrazení v rozsahu od fromElement (včetně) do toElement (exkluzivní). | |
ocasní sada | SetedSet tailSet (E fromElement) | Vrátí zobrazení obsahující prvky, které jsou větší nebo rovny danému fromElement. |
NavigableSet tailSet (E fromElement, boolean inclusive) | Vrátí pohled na prvky, které jsou rovny (pokud je true true) nebo větší než fromElement. |
TreeSet v Javě 8
Vezměte prosím na vědomí, že pro TreeSet nejsou ve verzi Java 8 žádné zásadní změny. Všechny metody a konstruktory fungují v prostředí Java 8 a novějších verzích.
Implementace TreeSet v Javě
Následující program Java implementuje většinu výše popsaných metod TreeSet.
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()); } }
Výstup:
Obsah sady stromů: 10 15 25 30 35
strop (25): 25
podlaha (25): 25
TreeSet obsahuje (15): true
Velikost sady stromů: 5
TreeSet První prvek: 10
TreeSet Poslední prvek: 35
Prvek 30 odstraněn ze TreeSet
TreeSet after remove (): 10 15 25 35
Velikost TreeSet po remove (): 4
Náhlavní souprava: (10, 15, 25)
Velikost sady stromů po clear (): 0
Ve výše uvedeném programu definujeme objekt TreeSet a poté k němu přidáme prvky pomocí metody „add“. Dále definujeme ArrayList. Poté přidáme prvky ArrayList do TreeSet pomocí metody „addAll“. Později předvedeme různé metody TreeSet, jako je Iterátor, strop, podlaha, první, poslední, obsahuje, velikost, isEmpty atd.
TreeSet Vs HashSet
Podívejme se na některé rozdíly mezi TreeSet a HashSet.
Sada stromů | HashSet |
---|---|
Prvky jsou seřazeny podle přirozeného řazení. | Prvky nejsou řazeny. |
Trvá O (log N) čas na operace, jako je vkládání, mazání a hledání, takže je pomalejší než TreeSet. | Trvá neustálý čas na základní operace, jako je vkládání, mazání a hledání, což je rychlejší než TreeSet. |
Nepovoluje nulové objekty. | Umožňuje nulový objekt. |
Používá metodu compareTo () k porovnání dvou objektů. | K porovnání dvou objektů používá metodu porovnání () a equals (). |
Interně implementováno pomocí Navigable TreeMap. | Interně implementováno pomocí HashMap. |
Má bohatou funkčnost API, které může provádět různé manipulace. | Funkční API HashSet je poměrně omezené. |
Často kladené otázky
Otázka č. 1) Co je to TreeSet?
Odpovědět: TreeSet je implementace SortedSet, která neumožňuje duplicitní hodnoty. Prvky v TreeSet jsou standardně seřazeny ve vzestupném pořadí.
Otázka č. 2) Jak přidáváte prvky do TreeSet v Javě?
Odpovědět: Třída TreeSet poskytuje metodu přidání, která se používá k přidání konkrétního prvku do TreeSet. Poskytuje také metodu „addAll“. Tato metoda přijímá jakoukoli jinou kolekci jako argument a poté přidá všechny prvky této kolekce do TreeSet.
Otázka č. 3) Je TreeSet bezpečný pro vlákna?
Odpovědět: Ne. TreeSet není bezpečný pro vlákna. Proto bychom se měli postarat o to, jak provozujeme TreeSet v prostředí s více vlákny.
Otázka č. 4) Může TreeSet mít duplikáty?
Odpovědět: Ne. TreeSet neumožňuje duplikáty.
Otázka č. 5)Umožňuje TreeSet v Javě hodnotu null?
Odpovědět: Ano. Ve TreeSetu můžeme mít nulové prvky.
Závěr
Tím je náš výukový program TreeSet dokončen. TreeSet je implementace SortedSet, která neumožňuje duplikáty, ale umožňuje hodnoty null. Prvky v TreeSet jsou standardně seřazeny podle přirozeného řazení ve vzestupném pořadí.
Viděli jsme základy třídy TreeSet spolu s její deklarací a různými konstruktory a metodami.
V našich dalších výukách probereme zbývající třídy kolekce Java.
=> Dávejte pozor na jednoduchou sérii školení Java zde.
Doporučené čtení
- Binární vyhledávací strom v Javě - příklady implementace a kódu
- TreeMap v Javě - výuka s příklady Java TreeMap
- Co je Java Vector | Výukový program Java Vector Class s příklady
- Výukový program třídy skeneru Java s příklady
- Výukový program třídy Java Array - java.util.Arrays Class with examples
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Java String obsahuje () Výukový program metod s příklady
- Jagged Array In Java - výukový program s příklady