treeset java tutorial with programming examples
V tomto výučbe sú vysvetlené všetky informácie o triede TreeSet, implementácii, iterácii, TreeSet Vs HashSet, príkladoch Java TreeSet atď.:
TreeSet v Jave implementuje rozhranie Set (presnejšie SortedSet). TreeSet interne používa TreeMap na ukladanie dát. Predvolene sa objekty alebo prvky TreeSet ukladajú podľa prirodzeného poradia vo vzostupnom poradí.
Trieda TreeSet, ktorá implementuje TreeSet v Jave, implementuje rozhranie „NavigableSet“ a dedí tiež triedu AbstractSet.
=> Tu nájdete A-Z výučbových kurzov Java.
Čo sa dozviete:
TreeSet v Jave
Všimnite si, že prvky TreeSet možno tiež výslovne objednať poskytnutím prispôsobeného komparátora v čase vytvárania objektu TreeSet pomocou konkrétneho prototypu konštruktora.
Ďalej sú uvedené niektoré z dôležitých charakteristík TreeSet:
- Trieda TreeSet implementuje rozhranie SortedSet. Nepovoľuje duplicitné prvky.
- Trieda TreeSet nie je synchronizovaná.
- TreeSet nezachová poradie vloženia, ale prvky v TreeSete sú zoradené podľa prirodzeného poradia.
- TreeSet je možné objednať pomocou vlastného komparátora pri vytváraní objektu TreeSet.
- TreeSet sa bežne používa na ukladanie obrovského množstva informácií, ktoré sú prirodzene triedené. To pomáha ľahkému a rýchlejšiemu prístupu.
Vyhlásenie triedy TreeSet
Java poskytuje triedu nazvanú „TreeSet“, ktorá obsahuje funkcie dátovej štruktúry TreeSet. Trieda TreeSet je súčasťou balíka java.util.
Na zahrnutie triedy TreeSet do programu Java by sme mali použiť príkaz import, ako je uvedené nižšie:
import java.util.TreeSet;
alebo
import java.util.*;
Všeobecné vyhlásenie triedy TreeSet je:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Ako je zrejmé z deklarácie triedy, trieda TreeSet rozširuje AbstractSet a implementuje rozhrania NavigableSet, Cloneable a Serializable.
Hierarchia tried pre triedu TreeSet je uvedená nižšie:
Interná implementácia
Vieme, že TreeSet implementuje rozhranie NavigableSet a rozširuje triedu SortedSet.
Interne je konštruktor TreeSet definovaný takto:
public TreeSet() { this(new TreeMap()); }
Ako je vidieť vo vyššie uvedenej definícii konštruktora TreeSet, je vyvolaný objekt TreeMap. Interne teda ide o objekt TreeMap, ktorý je implementovaný pre TreeSet. Pri pridávaní prvku do TreeSetu sa teda do TreeMap pridáva kľúč, v ktorom sú kľúče štandardne zoradené.
Podľa Dokumentácia Oracle k TreeSet ,
„TreeSet je implementácia NavigableSet založená na TreeMap.“
Príklad sady Java TreeSet
Nasledujúci program Java zobrazuje jednoduchý príklad demonštrujúci TreeSet. V tomto programe sme definovali jednoduchú sadu Color TreeSet. Pridáme doň prvky a potom ho zobrazíme. Upozorňujeme, že prvky sa zobrazujú podľa prirodzeného usporiadania.
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ýkon:
Obsah TreeSet:
Modrá Zelená Červená Žltá
Iterovať cez TreeSet
Pre prístup k jednotlivým prvkom TreeSet musíme iterovať cez TreeSet alebo inými slovami prechádzať cez TreeSet.
Robíme to tak, že deklarujeme Iterátor pre TreeSet a potom použijeme tento Iterátor na prístup ku každému prvku. Na tento účel použijeme metódu next () iterátora, ktorý vráti nasledujúci prvok v TreeSet.
Nasledujúci program Java demonštruje použitie Iterátora na iteráciu prostredníctvom 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ýkon:
Sada stromov: (5, 10, 15, 20, 25)
TreeSet pomocou Iterátora: 5, 10, 15, 20, 25,
nedefinovaný odkaz na triednu funkciu c ++
TreeSet Comparator v Jave
V predvolenom nastavení je sada stromov prirodzene usporiadaná. TreeSet môžeme tiež triediť v prispôsobenom poradí tak, že definujeme novú triedu komparátorov. V tejto triede komparátorov musíme prepísať metódu ‘compare’, aby sme triedili prvky TreeSet. Tento porovnávací objekt sa potom odovzdá konštruktoru TreeSet.
Nasledujúci program Java ukazuje použitie komparátora na triedenie 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ýkon:
Sada stromov: (Pune, Indore, Hyderabad, Bangaluru)
Vyššie uvedený program implementuje triedu komparátora na triedenie danej TreeSet abecedne v opačnom poradí.
Odporúčané čítanie = >> Rozhranie Java Comparator
Rozhranie TreeSet API / metódy a konštruktory
V tejto časti si rozoberieme API triedy TreeSet. Tu budeme diskutovať o konštruktoroch a metódach poskytovaných triedou TreeSet.
Trieda TreeSet poskytuje preťažené konštruktory na skonštruovanie objektu TreeSet.
Tabuľkovali sme tieto konštruktory nasledovne:
Konštruktéri
Prototyp konštruktéra | Popis | |
---|---|---|
obsahuje | boolean obsahuje (Objekt o) | Skontroluje, či TreeSet obsahuje daný prvok; pravda, ak existuje. |
TreeSet () | Predvolený konštruktor na vytvorenie nového prázdneho objektu TreeSet. | |
TreeSet (kolekcia c) | Vytvorí nový objekt TreeSet obsahujúci prvky z danej kolekcie c, zoradený podľa prirodzeného usporiadania. | |
TreeSet (Komparátor komparátor) | Vytvorí nový objekt TreeSet, ktorý je prázdny a bude zoradený podľa určeného komparátora. | |
TreeSet (SortedSet s) | Vytvorí nový objekt TreeSet, ktorý obsahuje prvky z daných triedených s. |
Metódy
Ďalej si predstavme rôzne metódy poskytované triedou TreeSet.
Metóda | Metóda Prototyp | Popis |
---|---|---|
pridať | boolovský prírastok (E e) | Pridá daný prvok do množiny TreeSet, ak tam ešte nie je. |
pridať všetko | boolean addAll (kolekcia c) | Pridá do množiny všetky prvky v danej kolekcii c. |
strop | E strop (E e) | Vráti prvok väčší alebo rovný e (najmenší prvok); alebo null, ak nie je prítomný žiadny prvok. |
jasný | prázdnota clear () | Vymaže všetky prvky zo sady TreeSet. |
klon | Klon objektu () | Vráti plytkú kópiu objektu TreeSet. |
komparátor | Komparátor komparátor () | Vráti komparátor pre TreeSet alebo null, ak sa použije prirodzené usporiadanie. |
zostupneIterator | Iterátor zostupneIterátor () | Vráti zostupný iterátor nad prvkami v TreeSet. |
zostupneSet | NavigableSet descendingSet () | Vráti pohľad na prvky v TreeSete v opačnom poradí. |
najprv | E prvé () | Vráti prvý alebo najnižší prvok v TreeSet. |
poschodie | E poschodie (E e) | Vráti prvok, ktorý je menší alebo rovný danému prvku e v TreeSet. Ak žiadny takýto prvok neexistuje, vráti hodnotu null. |
hlavová súprava | Zoradená sada hlavová sada (E toElement) | vráti množinu prvkov, ktoré sú striktne menšie ako daný prvok |
NavigableSet headSet (E toElement, boolean inclusive) | Vráti množinu prvkov, ktoré sa rovnajú (ak sú = true) alebo sú menšie ako dané prvku. | |
vyššie | E vyššie (E e) | Vráti najmenší prvok v tejto množine striktne väčší ako daný prvok alebo hodnotu null, ak taký prvok neexistuje. |
je prázdny | boolean isEmpty () | Skontroluje, či je sada TreeSet prázdna. Vráti hodnotu true, ak je prázdna. |
iterátor | Iterátor iterátor () | Vráti iterátor (vo vzostupnom poradí) pre TreeSet. |
posledný | E posledný () | Vráti najvyšší alebo posledný prvok v TreeSet. |
nižšie | E nižšie (E e) | Vráti prvok (najväčší prvok), ktorý je striktne menší ako daný prvok e v TreeSet. |
anketaPrvý | E pollFirst () | Odstráni a vráti prvý (najnižší) prvok v množine; null, ak je sada prázdna. |
anketaPosledné | E anketaPosledná () | Odstráni a vráti posledný (najväčší) prvok v množine; null, ak je nastavený prázdny. |
odstrániť | boolean remove (Objekt o) | Odstráni daný prvok z množiny. |
veľkosť | veľkosť int () | Vráti veľkosť alebo počet prvkov prítomných v TreeSet. |
podmnožina | Podmnožina NavigableSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Vráti pohľad na prvky v rozsahu od elementu do elementu. |
Podmnožina SortedSet (E fromElement, E toElement) | Vráti prvky zobrazenia v rozsahu od elementu (vrátane) až po element (s výhradou). | |
tailSet | SortedSet tailSet (E fromElement) | Vráti zobrazenie obsahujúce prvky, ktoré sú väčšie alebo rovné danému prvku fromElement. |
NavigableSet tailSet (E fromElement, boolean inclusive) | Vráti pohľad na prvky, ktoré sú rovné (ak je pravda true) alebo väčšie ako fromElement. |
TreeSet v Jave 8
Upozorňujeme, že pre TreeSet neexistujú vo verzii Java 8 žiadne zásadné zmeny. Všetky metódy a konštruktory pracujú v prostredí Java 8 a novších verziách.
Implementácia TreeSet v Jave
Nasledujúci program Java implementuje väčšinu vyššie opísaných metód 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ýkon:
Obsah stromovej sady: 10 15 25 30 35
strop (25): 25
poschodie (25): 25
TreeSet obsahuje (15): true
Veľkosť sady stromov: 5
TreeSet Prvý prvok: 10
TreeSet Posledný prvok: 35
Element 30 bol odstránený z TreeSet
Sada stromov po odstránení (): 10 15 25 35
Veľkosť stromu po odstránení (): 4
Náhlavná súprava: (10, 15, 25)
Veľkosť stromovej sady po vymazaní (): 0
Vo vyššie uvedenom programe definujeme objekt TreeSet a potom k nemu pridávame prvky pomocou metódy „add“. Ďalej definujeme ArrayList. Potom pridáme prvky ArrayList do TreeSet pomocou metódy „addAll“. Neskôr si ukážeme rôzne metódy TreeSet ako Iterátor, strop, podlaha, prvá, posledná, obsahuje, veľkosť, isEmpty atď.
TreeSet Vs HashSet
Pozrime sa na niektoré rozdiely medzi TreeSet a HashSet.
TreeSet | HashSet |
---|---|
Prvky sa objednávajú podľa prirodzeného usporiadania. | Prvky nie sú zoradené. |
Trvá O (log N) času pri operáciách, ako je vkladanie, mazanie a vyhľadávanie, čím je spomalený ako TreeSet. | Trvá konštantne čas na základné operácie, ako je vkladanie, mazanie a vyhľadávanie, čo je rýchlejšie ako TreeSet. |
Nepovoluje nulové objekty. | Umožňuje nulový objekt. |
Na porovnanie dvoch objektov sa používa metóda compareTo (). | Na porovnanie dvoch objektov sa používa metóda porovnávania () a equals (). |
Interne implementované pomocou Navigable TreeMap. | Interne implementované pomocou HashMap. |
Má bohaté funkcionality API, ktoré dokáže vykonávať rôzne manipulácie. | Funkčné API HashSetu je dosť obmedzené. |
často kladené otázky
Otázka 1) Čo je to TreeSet?
Odpoveď: TreeSet je implementácia SortedSet, ktorá neumožňuje duplicitné hodnoty. Prvky v TreeSete sú predvolene zoradené vzostupne.
Otázka č. 2) Ako pridávate prvky do TreeSet v Jave?
Odpoveď: Trieda TreeSet poskytuje metódu pridania, ktorá sa používa na pridanie konkrétneho prvku do TreeSet. Poskytuje tiež metódu „addAll“. Táto metóda prijíma akúkoľvek inú kolekciu ako argument a potom pridáva všetky prvky tejto kolekcie do TreeSet.
Otázka č. 3) Je TreeSet bezpečný pre vlákna?
Odpoveď: Nie. TreeSet nie je bezpečný pre vlákna. Preto by sme sa mali postarať o to, ako fungujeme TreeSet v prostredí s viacerými vláknami.
Otázka č. 4) Môže mať TreeSet duplikáty?
Odpoveď: Nie. TreeSet neumožňuje duplikáty.
Otázka č. 5)Umožňuje TreeSet v jazyku Java hodnotu null?
Odpoveď: Áno. V TreeSete môžeme mať nulové prvky.
Záver
Týmto je dokončený náš výukový program TreeSet. TreeSet je implementácia SortedSet, ktorá neumožňuje duplikáty, ale umožňuje nulové hodnoty. Prvky v TreeSete sú predvolene zoradené podľa prirodzeného poradia vzostupne.
Videli sme základy triedy TreeSet spolu s jej deklaráciou a rôznymi konštruktormi a metódami.
V našich ďalších tutoriáloch diskutujeme o zostávajúcich triedach zbierania Java.
=> Dajte si pozor na jednoduchú sériu školení Java tu.
Odporúčané čítanie
- Binárny vyhľadávací strom v prostredí Java - príklady implementácie a kódu
- TreeMap In Java - návod s príkladmi Java TreeMap
- Čo je Java Vector | Výukový program Java Vector Class s príkladmi
- Výukový program triedy skenerov Java s príkladmi
- Výukový program triedy Java Array - java.util. Trieda polí s príkladmi
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Java String obsahuje () Výukový program metód s príkladmi
- Jagged Array In Java - návod s príkladmi