logo

Třída Java TreeSet

Hierarchie tříd TreeSet

Třída Java TreeSet implementuje rozhraní Set, které používá strom pro ukládání. Zdědí třídu AbstractSet a implementuje rozhraní NavigableSet. Objekty třídy TreeSet jsou uloženy ve vzestupném pořadí.

Důležité body o třídě Java TreeSet jsou:

  • Třída Java TreeSet obsahuje pouze jedinečné prvky jako HashSet.
  • Přístup ke třídě Java TreeSet a doba načítání jsou velmi rychlé.
  • Třída Java TreeSet nepovoluje prvek null.
  • Třída Java TreeSet není synchronizovaná.
  • Třída Java TreeSet udržuje vzestupné pořadí.
  • Třída Java TreeSet obsahuje pouze jedinečné prvky jako HashSet.
  • Přístup ke třídě Java TreeSet a doba načítání jsou poměrně rychlé.
  • Třída Java TreeSet nepovoluje prvky null.
  • Třída Java TreeSet je nesynchronizovaná.
  • Třída Java TreeSet udržuje vzestupné pořadí.
  • TreeSet může povolit pouze ty obecné typy, které jsou srovnatelné. Například rozhraní Comparable je implementováno třídou StringBuffer.

Interní práce třídy TreeSet

TreeSet je implementován pomocí binárního vyhledávacího stromu, který je samovyvažující stejně jako červeno-černý strom. Proto operace jako vyhledávání, odebírání a přidávání spotřebovávají O(log(N)) čas. Důvod je v samovyvažovacím stromu. Slouží k zajištění toho, aby výška stromu nikdy nepřesáhla O(log(N)) pro všechny uvedené operace. Jedná se tedy o jednu z efektivních datových struktur, která umožňuje uchovávat roztříděná velká data a také s nimi provádět operace.

Synchronizace třídy The TreeSet

Jak již bylo zmíněno výše, třída TreeSet není synchronizována. To znamená, že pokud více než jedno vlákno současně přistupuje ke stromové sadě a jedno z přistupujících vláken ji upravuje, pak musí být synchronizace provedena ručně. Obvykle se to provádí provedením nějaké synchronizace objektů, která zapouzdří sadu. V případě, že žádný takový objekt není nalezen, je však nutné sadu zabalit pomocí metody Collections.synchronizedSet(). Doporučuje se používat metodu během vytváření, abyste se vyhnuli nesynchronizovanému přístupu sady. Následující fragment kódu ukazuje totéž.

 TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet); 

Hierarchie třídy TreeSet

Jak ukazuje výše uvedený diagram, třída Java TreeSet implementuje rozhraní NavigableSet. Rozhraní NavigableSet rozšiřuje rozhraní SortedSet, Set, Collection a Iterable v hierarchickém pořadí.

bajtové pole na řetězec java

Deklarace třídy TreeSet

Podívejme se na deklaraci třídy java.util.TreeSet.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Konstruktoři třídy Java TreeSet Class

Konstruktér Popis
TreeSet() Používá se ke konstrukci prázdné sady stromů, která bude setříděna vzestupně podle přirozeného pořadí sady stromů.
Sada stromů (kolekce c) Používá se k vytvoření nové sady stromů, která obsahuje prvky kolekce c.
TreeSet (srovnávací komparátor) Slouží ke konstrukci prázdné množiny stromů, která bude setříděna podle daného komparátoru.
TreeSet (SortedSet s) Používá se k sestavení TreeSet, který obsahuje prvky dané SortedSet.

Metody třídy Java TreeSet

Metoda Popis
booleovské sčítání (E e) Používá se k přidání zadaného prvku do této sady, pokud ještě není přítomen.
boolean addAll(kolekce c) Používá se k přidání všech prvků v zadané kolekci do této sady.
E strop (E e) Vrací stejný nebo nejbližší největší prvek zadaného prvku z množiny nebo hodnotu null, žádný takový prvek neexistuje.
Komparátor komparátor() Vrátí komparátor, který uspořádá prvky.
Sestupně iterátorIterator() Používá se k iteraci prvků v sestupném pořadí.
NavigableSet descendingSet() Vrací prvky v opačném pořadí.
E patro (E e) Vrací stejný nebo nejbližší nejmenší prvek zadaného prvku z množiny nebo hodnotu null, takový prvek neexistuje.
SortedSet headset (E toElement) Vrátí skupinu prvků, které jsou menší než zadaný prvek.
HeadSet NavigableSet (E toElement, včetně booleovských hodnot) Vrací skupinu prvků, které jsou menší nebo rovné (pokud, včetně je pravda) zadanému prvku.
E vyšší (E e) Vrací nejbližší největší prvek zadaného prvku z množiny, nebo null, takový prvek neexistuje.
Iterátor iterátor() Používá se k iteraci prvků ve vzestupném pořadí.
E nižší (E e) Vrací nejbližší nejmenší prvek zadaného prvku z množiny nebo null, takový prvek neexistuje.
E pollFirst() Používá se k načtení a odstranění nejnižšího (prvního) prvku.
E pollLast() Používá se k načtení a odstranění nejvyššího (posledního) prvku.
Spliterator spliterator() Používá se k vytvoření děliče s pozdním vázáním a rychlého selhání nad prvky.
Podmnožina NavigableSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) Vrací množinu prvků, které leží mezi daným rozsahem.
SortedSet subSet(E fromElement, E toElement)) Vrací sadu prvků, které leží mezi daným rozsahem, který zahrnuje fromElement a vylučuje toElement.
SortedSet tailSet(E fromElement) Vrací sadu prvků, které jsou větší nebo rovné zadanému prvku.
NavigableSet tailSet(E fromElement, včetně booleanů) Vrací sadu prvků, které jsou větší nebo rovné (pokud, včetně je pravda) zadanému prvku.
boolean obsahuje (Objekt o) Vrací hodnotu true, pokud tato sada obsahuje zadaný prvek.
boolean isEmpty() Pokud tato sada neobsahuje žádné prvky, vrátí hodnotu true.
booleovské odstranění (objekt o) Používá se k odstranění zadaného prvku z této sady, pokud je přítomen.
void clear() Používá se k odstranění všech prvků z této sady.
Object clone() Vrátí mělkou kopii této instance TreeSet.
E první () Vrátí první (nejnižší) prvek aktuálně v této tříděné sadě.
E poslední() Vrátí poslední (nejvyšší) prvek aktuálně v této tříděné sadě.
int size() Vrátí počet prvků v této sadě.

Příklady Java TreeSet

Příklad 1 Java TreeSet:

Podívejme se na jednoduchý příklad Java TreeSet.

Název souboru: TreeSet1.java

 import java.util.*; class TreeSet1{ public static void main(String args[]){ //Creating and adding elements TreeSet al=new TreeSet(); al.add('Ravi'); al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); //Traversing elements Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 
Otestujte to hned

Výstup:

bash pro smyčku 1 až 10
Ajay Ravi Vijay 

Příklad 2 Java TreeSet:

Podívejme se na příklad procházení prvků v sestupném pořadí.

Název souboru: TreeSet2.java

 import java.util.*; class TreeSet2{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ajay'); System.out.println('Traversing element through Iterator in descending order'); Iterator i=set.descendingIterator(); while(i.hasNext()) { System.out.println(i.next()); } } } 
Otestujte to hned

Výstup:

Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay 

Příklad 3 Java TreeSet:

Podívejme se na příklad pro načtení a odstranění nejvyšší a nejnižší hodnoty.

Název souboru: TreeSet3.java

linux přejmenovat adresář
 import java.util.*; class TreeSet3{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add(24); set.add(66); set.add(12); set.add(15); System.out.println('Lowest Value: '+set.pollFirst()); System.out.println('Highest Value: '+set.pollLast()); } } 

Výstup:

 Lowest Value: 12 Highest Value: 66 

Příklad 4 Java TreeSet:

V tomto příkladu provádíme různé operace NavigableSet.

Název souboru: TreeSet4.java

java celé číslo na řetězec
 import java.util.*; class TreeSet4{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('A'); set.add('B'); set.add('C'); set.add('D'); set.add('E'); System.out.println('Initial Set: '+set); System.out.println('Reverse Set: '+set.descendingSet()); System.out.println('Head Set: '+set.headSet('C', true)); System.out.println('SubSet: '+set.subSet('A', false, 'E', true)); System.out.println('TailSet: '+set.tailSet('C', false)); } } 

Výstup:

Initial Set: [A, B, C, D, E] Reverse Set: [E, D, C, B, A] Head Set: [A, B, C] SubSet: [B, C, D, E] TailSet: [D, E] 

Příklad 5 Java TreeSet:

V tomto příkladu provádíme různé operace SortedSetSet.

Název souboru: TreeSet5.java

 import java.util.*; class TreeSet5{ public static void main(String args[]){ TreeSet set=new TreeSet(); set.add('A'); set.add('B'); set.add('C'); set.add('D'); set.add('E'); System.out.println('Intial Set: '+set); System.out.println('Head Set: '+set.headSet('C')); System.out.println('SubSet: '+set.subSet('A', 'E')); System.out.println('TailSet: '+set.tailSet('C')); } } 

Výstup:

Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E] 

Příklad Java TreeSet: Kniha

Podívejme se na příklad TreeSet, kde přidáváme knihy do sady a tiskneme všechny knihy. Prvky v TreeSet musí být typu Comparable. Třídy String a Wrapper jsou ve výchozím nastavení Porovnatelné. Chcete-li přidat uživatelem definované objekty do TreeSet, musíte implementovat rozhraní Comparable.

Název souboru: TreeSetExample.java

dědičnost v c++
 import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } // implementing the abstract method public int compareTo(Book b) { if(id&gt;b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class treesetexample { static void main(string[] args) set treeset(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to treeset set.add(b1); set.add(b2); set.add(b3); traversing for(book b:set){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); < pre> <p> <strong>Output:</strong> </p> <pre>101 Data Communications &amp; Networking Forouzan Mc Graw Hill 4 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <h3>ClassCast Exception in TreeSet</h3> <p>If we add an object of the class that is not implementing the Comparable interface, the ClassCast Exception is raised. Observe the following program.</p> <p> <strong>FileName:</strong> ClassCastExceptionTreeSet.java</p> <pre> // important import statement import java.util.*; class Employee { int empId; String name; // getting the name of the employee String getName() { return this.name; } // setting the name of the employee void setName(String name) { this.name = name; } // setting the employee id // of the employee void setId(int a) { this.empId = a; } // retrieving the employee id of // the employee int getId() { return this.empId; } } public class ClassCastExceptionTreeSet { // main method public static void main(String[] argvs) { // creating objects of the class Employee Employee obj1 = new Employee(); Employee obj2 = new Employee(); TreeSet ts = new TreeSet(); // adding the employee objects to // the TreeSet class ts.add(obj1); ts.add(obj2); System.out.println(&apos;The program has been executed successfully.&apos;); } } </pre> <p>When we compile the above program, we get the ClassCastException, as shown below.</p> <pre> Exception in thread &apos;main&apos; java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader &apos;app&apos;; java.lang.Comparable is in module java.base of loader &apos;bootstrap&apos;) at java.base/java.util.TreeMap.compare(TreeMap.java:1569) at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776) at java.base/java.util.TreeMap.put(TreeMap.java:785) at java.base/java.util.TreeMap.put(TreeMap.java:534) at java.base/java.util.TreeSet.add(TreeSet.java:255) at ClassCastExceptionTreeSet.main(ClassCastExceptionTreeSet.java:52) </pre> <p> <strong>Explanation:</strong> In the above program, it is required to implement a Comparable interface. It is because the TreeSet maintains the sorting order, and for doing the sorting the comparison of different objects that are being inserted in the TreeSet is must, which is accomplished by implementing the Comparable interface.</p> <hr></b.id){>

Výjimka ClassCast v TreeSet

Pokud přidáme objekt třídy, který neimplementuje rozhraní Comparable, vyvolá se výjimka ClassCast. Dodržujte následující program.

Název souboru: ClassCastExceptionTreeSet.java

 // important import statement import java.util.*; class Employee { int empId; String name; // getting the name of the employee String getName() { return this.name; } // setting the name of the employee void setName(String name) { this.name = name; } // setting the employee id // of the employee void setId(int a) { this.empId = a; } // retrieving the employee id of // the employee int getId() { return this.empId; } } public class ClassCastExceptionTreeSet { // main method public static void main(String[] argvs) { // creating objects of the class Employee Employee obj1 = new Employee(); Employee obj2 = new Employee(); TreeSet ts = new TreeSet(); // adding the employee objects to // the TreeSet class ts.add(obj1); ts.add(obj2); System.out.println(&apos;The program has been executed successfully.&apos;); } } 

Když zkompilujeme výše uvedený program, dostaneme ClassCastException, jak je ukázáno níže.

 Exception in thread &apos;main&apos; java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader &apos;app&apos;; java.lang.Comparable is in module java.base of loader &apos;bootstrap&apos;) at java.base/java.util.TreeMap.compare(TreeMap.java:1569) at java.base/java.util.TreeMap.addEntryToEmptyMap(TreeMap.java:776) at java.base/java.util.TreeMap.put(TreeMap.java:785) at java.base/java.util.TreeMap.put(TreeMap.java:534) at java.base/java.util.TreeSet.add(TreeSet.java:255) at ClassCastExceptionTreeSet.main(ClassCastExceptionTreeSet.java:52) 

Vysvětlení: Ve výše uvedeném programu je nutné implementovat srovnatelné rozhraní. Je to proto, že TreeSet udržuje pořadí řazení a pro provádění řazení je nutné srovnání různých objektů, které jsou vkládány do TreeSet, což je dosaženo implementací rozhraní Comparable.