logo

Java TreeSet-klasse

TreeSet-klassehiërarchie

De Java TreeSet-klasse implementeert de Set-interface die een boom gebruikt voor opslag. Het erft de AbstractSet-klasse en implementeert de NavigableSet-interface. De objecten van de klasse TreeSet worden in oplopende volgorde opgeslagen.

De belangrijke punten over de Java TreeSet-klasse zijn:

  • De Java TreeSet-klasse bevat alleen unieke elementen zoals HashSet.
  • De toegangs- en ophaaltijden van Java TreeSet-klassen zijn zeer snel.
  • De Java TreeSet-klasse staat geen null-element toe.
  • De Java TreeSet-klasse is niet gesynchroniseerd.
  • De Java TreeSet-klasse handhaaft een oplopende volgorde.
  • De Java TreeSet-klasse bevat alleen unieke elementen zoals HashSet.
  • De toegangs- en ophaaltijden van de Java TreeSet-klasse zijn behoorlijk snel.
  • De Java TreeSet-klasse staat geen nulelementen toe.
  • De Java TreeSet-klasse is niet-gesynchroniseerd.
  • De Java TreeSet-klasse handhaaft een oplopende volgorde.
  • De TreeSet kan alleen generieke typen toestaan ​​die vergelijkbaar zijn. De vergelijkbare interface wordt bijvoorbeeld geïmplementeerd door de klasse StringBuffer.

Interne werking van de TreeSet-klasse

TreeSet wordt geïmplementeerd met behulp van een binaire zoekboom, die zelfbalancerend is, net als een rood-zwarte boom. Daarom verbruiken bewerkingen zoals zoeken, verwijderen en toevoegen O(log(N)) tijd. De reden hierachter ligt in de zelfbalancerende boom. Het is er om ervoor te zorgen dat de boomhoogte nooit groter is dan O(log(N)) voor alle genoemde bewerkingen. Daarom is het een van de efficiënte datastructuren om de grote gegevens die gesorteerd zijn bij te houden en er ook bewerkingen op uit te voeren.

Synchronisatie van de TreeSet-klasse

Zoals hierboven al vermeld, is de TreeSet-klasse niet gesynchroniseerd. Dit betekent dat als meer dan één thread tegelijkertijd toegang heeft tot een boomset, en een van de toegang hebbende threads deze wijzigt, de synchronisatie handmatig moet worden uitgevoerd. Dit wordt meestal gedaan door een objectsynchronisatie uit te voeren die de set inkapselt. Als een dergelijk object echter niet wordt gevonden, moet de set worden ingepakt met behulp van de methode Collections.synchronizedSet(). Het wordt aanbevolen om de methode te gebruiken tijdens het maken van de set om niet-gesynchroniseerde toegang tot de set te voorkomen. Het volgende codefragment laat hetzelfde zien.

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

Hiërarchie van de TreeSet-klasse

Zoals weergegeven in het bovenstaande diagram implementeert de Java TreeSet-klasse de NavigableSet-interface. De NavigableSet-interface breidt de SortedSet-, Set-, Collection- en Iterable-interfaces uit in hiërarchische volgorde.

naam van

TreeSet-klasseverklaring

Laten we de declaratie voor de klasse java.util.TreeSet bekijken.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Constructeurs van Java TreeSet-klasse

Constructeur Beschrijving
BoomSet() Het wordt gebruikt om een ​​lege boomset samen te stellen die in oplopende volgorde wordt gesorteerd volgens de natuurlijke volgorde van de boomset.
BoomSet(Verzameling c) Het wordt gebruikt om een ​​nieuwe boomset te bouwen die de elementen van de collectie bevat. c.
TreeSet (vergelijkervergelijker) Het wordt gebruikt om een ​​lege boomset samen te stellen die wordt gesorteerd op basis van de gegeven comparator.
BoomSet(GesorteerdeSets) Het wordt gebruikt om een ​​TreeSet te bouwen die de elementen van de gegeven SortedSet bevat.

Methoden van Java TreeSet-klasse

Methode Beschrijving
Booleaanse optelling(E e) Het wordt gebruikt om het opgegeven element aan deze set toe te voegen als het nog niet aanwezig is.
boolean addAll(Verzameling c) Het wordt gebruikt om alle elementen in de opgegeven verzameling aan deze set toe te voegen.
E plafond(E e) Het retourneert het gelijke of dichtstbijzijnde grootste element van het opgegeven element uit de set, of nul, zo'n element bestaat niet.
Vergelijkervergelijker() Het retourneert een comparator die de elementen op volgorde rangschikt.
Iterator aflopendIterator() Het wordt gebruikt om de elementen in aflopende volgorde te herhalen.
NavigeerbareSet aflopendeSet() Het retourneert de elementen in omgekeerde volgorde.
E verdieping(E e) Het retourneert het gelijke of dichtstbijzijnde kleinste element van het opgegeven element uit de set, anders bestaat er geen dergelijk element.
SortedSet headSet(E totElement) Het retourneert de groep elementen die kleiner zijn dan het opgegeven element.
NavigableSet headSet (E tot Element, inclusief Boolean) Het retourneert de groep elementen die kleiner zijn dan of gelijk zijn aan (als inclusief waar is) het opgegeven element.
E hoger(E e) Het retourneert het dichtstbijzijnde grootste element van het opgegeven element uit de set, anders bestaat er geen dergelijk element.
Iterator-iterator() Het wordt gebruikt om de elementen in oplopende volgorde te herhalen.
E lager(E e) Het retourneert het dichtstbijzijnde kleinste element van het opgegeven element uit de set, anders bestaat er geen dergelijk element.
E pollEerste() Het wordt gebruikt om het laagste (eerste) element op te halen en te verwijderen.
E-peilingLaatste() Het wordt gebruikt om het hoogste (laatste) element op te halen en te verwijderen.
Splitser splitser() Het wordt gebruikt om een ​​laatbindende en feilloze spliterator over de elementen te creëren.
NavigeerbareSet subSet(E vanElement, boolean vanInclusive, E naarElement, boolean naarInclusive) Het retourneert een reeks elementen die binnen het opgegeven bereik liggen.
SortedSet subSet(E vanElement, E naarElement)) Het retourneert een reeks elementen die tussen het gegeven bereik liggen, inclusief fromElement en exclusief toElement.
GesorteerdeSet staartSet(E vanElement) Het retourneert een reeks elementen die groter zijn dan of gelijk zijn aan het opgegeven element.
NavigableSet tailSet(E vanElement, inclusief Boolean) Het retourneert een reeks elementen die groter zijn dan of gelijk zijn aan (als inclusief waar is) het opgegeven element.
booleaanse waarde bevat(Object o) Het retourneert true als deze set het opgegeven element bevat.
booleaanse waarde isLeeg() Het retourneert true als deze set geen elementen bevat.
booleaanse verwijder(Object o) Het wordt gebruikt om het opgegeven element uit deze set te verwijderen als het aanwezig is.
leegte helder() Het wordt gebruikt om alle elementen uit deze set te verwijderen.
Objectkloon() Het retourneert een ondiepe kopie van deze TreeSet-instantie.
E eerst() Het retourneert het eerste (laagste) element dat zich momenteel in deze gesorteerde set bevindt.
E laatste() Het retourneert het laatste (hoogste) element dat momenteel in deze gesorteerde set aanwezig is.
int-grootte() Het retourneert het aantal elementen in deze set.

Java TreeSet-voorbeelden

Java TreeSet-voorbeeld 1:

Laten we een eenvoudig voorbeeld van Java TreeSet bekijken.

Bestandsnaam: 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()); } } } 
Test het nu

Uitgang:

volledige vorm id
Ajay Ravi Vijay 

Java TreeSet-voorbeeld 2:

Laten we een voorbeeld bekijken van het doorlopen van elementen in aflopende volgorde.

Bestandsnaam: 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()); } } } 
Test het nu

Uitgang:

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

Java TreeSet-voorbeeld 3:

Laten we een voorbeeld bekijken om de hoogste en laagste waarde op te halen en te verwijderen.

Bestandsnaam: TreeSet3.java

10 van 1 miljoen
 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()); } } 

Uitgang:

 Lowest Value: 12 Highest Value: 66 

Java TreeSet-voorbeeld 4:

In dit voorbeeld voeren we verschillende NavigableSet-bewerkingen uit.

Bestandsnaam: TreeSet4.java

Java-geheel getal naar tekenreeks
 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)); } } 

Uitgang:

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] 

Java TreeSet-voorbeeld 5:

In dit voorbeeld voeren we verschillende SortedSetSet-bewerkingen uit.

Bestandsnaam: 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')); } } 

Uitgang:

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

Java TreeSet Voorbeeld: Boek

Laten we een TreeSet-voorbeeld bekijken waarin we boeken aan de set toevoegen en alle boeken afdrukken. De elementen in TreeSet moeten van het type Vergelijkbaar zijn. String- en Wrapper-klassen zijn standaard vergelijkbaar. Om door de gebruiker gedefinieerde objecten in TreeSet toe te voegen, moet u de Vergelijkbare interface implementeren.

Bestandsnaam: TreeSetExample.java

vikas divyakirti
 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){>

ClassCast-uitzondering in TreeSet

Als we een object van de klasse toevoegen dat de vergelijkbare interface niet implementeert, wordt de ClassCast-uitzondering gegenereerd. Neem het volgende programma in acht.

Bestandsnaam: 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;); } } 

Wanneer we het bovenstaande programma compileren, krijgen we de ClassCastException, zoals hieronder weergegeven.

 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) 

Uitleg: In het bovenstaande programma is het vereist om een ​​vergelijkbare interface te implementeren. Het is omdat de TreeSet de sorteervolgorde handhaaft, en voor het sorteren is de vergelijking van verschillende objecten die in de TreeSet worden ingevoegd een must, wat wordt bereikt door de Comparable-interface te implementeren.