logo

Java TreeSet klasse

TreeSet klassehierarki

Java TreeSet-klassen implementerer Set-grænsefladen, der bruger et træ til opbevaring. Det arver AbstractSet-klassen og implementerer NavigableSet-grænsefladen. Objekterne i TreeSet-klassen gemmes i stigende rækkefølge.

De vigtige punkter om Java TreeSet-klassen er:

  • Java TreeSet-klassen indeholder kun unikke elementer som HashSet.
  • Java TreeSet klasse adgang og hentning tider er stille og hurtigt.
  • Java TreeSet-klassen tillader ikke null-element.
  • Java TreeSet-klassen er ikke-synkroniseret.
  • Java TreeSet-klassen opretholder stigende rækkefølge.
  • Java TreeSet-klassen indeholder kun unikke elementer som HashSet.
  • Java TreeSet-klassens adgang og hentningstid er ret hurtig.
  • Java TreeSet-klassen tillader ikke null-elementer.
  • Java TreeSet-klassen er ikke-synkroniseret.
  • Java TreeSet-klassen opretholder stigende rækkefølge.
  • TreeSet kan kun tillade de generiske typer, der er sammenlignelige. For eksempel implementeres The Comparable-grænsefladen af ​​StringBuffer-klassen.

Internt arbejde i TreeSet Class

TreeSet bliver implementeret ved hjælp af et binært søgetræ, som er selvbalancerende ligesom et rød-sort træ. Derfor bruger operationer såsom en søgning, fjernelse og tilføjelse O(log(N))-tid. Årsagen bag dette er der i det selvbalancerende træ. Det er der for at sikre, at træhøjden aldrig overstiger O(log(N)) for alle de nævnte operationer. Derfor er det en af ​​de effektive datastrukturer for at holde de store data, der er sorteret, og også til at lave operationer på det.

Synkronisering af The TreeSet Class

Som allerede nævnt ovenfor er TreeSet-klassen ikke synkroniseret. Det betyder, at hvis mere end én tråd samtidig får adgang til et træsæt, og en af ​​de adgangstråde ændrer det, så skal synkroniseringen udføres manuelt. Det gøres normalt ved at lave noget objektsynkronisering, der indkapsler sættet. Men i det tilfælde, hvor der ikke findes et sådant objekt, skal sættet pakkes ved hjælp af Collections.synchronizedSet()-metoden. Det anbefales at bruge metoden under oprettelsestiden for at undgå usynkroniseret adgang til sættet. Følgende kodestykke viser det samme.

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

Hierarki af TreeSet-klassen

Som vist i diagrammet ovenfor implementerer Java TreeSet-klassen NavigableSet-grænsefladen. NavigableSet-grænsefladen udvider SortedSet, Set, Collection og Iterable-grænseflader i hierarkisk rækkefølge.

java visualizer

TreeSet-klassedeklaration

Lad os se erklæringen for java.util.TreeSet-klassen.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Konstruktører af Java TreeSet Class

Konstruktør Beskrivelse
Træsæt() Det bruges til at konstruere et tomt træsæt, der vil blive sorteret i stigende rækkefølge i henhold til træsættets naturlige rækkefølge.
Træsæt (Samling c) Det bruges til at bygge et nyt træsæt, der indeholder elementerne i samlingen c.
TreeSet (Komparator komparator) Det bruges til at konstruere et tomt træsæt, der vil blive sorteret efter en given komparator.
Træsæt(Sorteret sæt) Det bruges til at bygge et træsæt, der indeholder elementerne i det givne SortedSet.

Metoder til Java TreeSet Class

Metode Beskrivelse
boolesk add(E e) Det bruges til at tilføje det angivne element til dette sæt, hvis det ikke allerede er til stede.
boolean addAll(Samling c) Det bruges til at tilføje alle elementerne i den angivne samling til dette sæt.
E loft(E e) Det returnerer det samme eller det nærmeste største element af det angivne element fra sættet, eller null er der ikke et sådant element.
Komparator komparator() Det returnerer en komparator, der arrangerer elementer i rækkefølge.
Iterator descendingIterator() Det bruges til at iterere elementerne i faldende rækkefølge.
NavigableSet descendingSet() Det returnerer elementerne i omvendt rækkefølge.
E etage(E e) Det returnerer det ens eller det nærmeste mindste element af det angivne element fra sættet, eller null er der ikke et sådant element.
SortedSet headset(E toElement) Det returnerer gruppen af ​​elementer, der er mindre end det angivne element.
NavigableSet headset (E toElement, boolean inklusive) Det returnerer gruppen af ​​elementer, der er mindre end eller lig med (hvis inklusive er sandt) det angivne element.
E højere(E e) Det returnerer det nærmeste største element af det angivne element fra sættet, eller null der ikke er et sådant element.
Iterator iterator() Det bruges til at iterere elementerne i stigende rækkefølge.
E lavere(E e) Det returnerer det nærmeste mindste element af det angivne element fra sættet, eller null er der ikke et sådant element.
E pollFirst() Det bruges til at hente og fjerne det laveste (første) element.
E pollLast() Det bruges til at hente og fjerne det højeste (sidste) element.
Spliterator splitterator() Det bruges til at skabe en sent-bindende og fejl-hurtig splitter over elementerne.
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) Det returnerer et sæt elementer, der ligger mellem det givne interval.
SortedSet subSet(E fromElement, E toElement)) Det returnerer et sæt elementer, der ligger mellem det givne interval, som inkluderer fromElement og ekskluderer toElement.
SortedSet tailSet(E fromElement) Det returnerer et sæt af elementer, der er større end eller lig med det angivne element.
NavigableSet tailSet(E fromElement, boolean inklusive) Det returnerer et sæt elementer, der er større end eller lig med (hvis inklusive er sandt) det angivne element.
boolesk indeholder(Objekt o) Det returnerer sandt, hvis dette sæt indeholder det angivne element.
boolsk er tom() Det returnerer sandt, hvis dette sæt ikke indeholder nogen elementer.
boolesk fjern(Objekt o) Det bruges til at fjerne det angivne element fra dette sæt, hvis det er til stede.
void clear() Det bruges til at fjerne alle elementer fra dette sæt.
Objekt klon() Det returnerer en overfladisk kopi af denne TreeSet-instans.
E først() Det returnerer det første (laveste) element i øjeblikket i dette sorterede sæt.
E sidste() Det returnerer det sidste (højeste) element i øjeblikket i dette sorterede sæt.
int størrelse() Det returnerer antallet af elementer i dette sæt.

Eksempler på Java TreeSet

Java TreeSet Eksempel 1:

Lad os se et simpelt eksempel på Java TreeSet.

Filnavn: 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 det nu

Produktion:

Ajay Ravi Vijay 

Java TreeSet Eksempel 2:

Lad os se et eksempel på at krydse elementer i faldende rækkefølge.

hvad er eksport i linux

Filnavn: 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 det nu

Produktion:

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

Java TreeSet Eksempel 3:

Lad os se et eksempel for at hente og fjerne den højeste og laveste værdi.

Filnavn: TreeSet3.java

hvad er en grænseflade
 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()); } } 

Produktion:

 Lowest Value: 12 Highest Value: 66 

Java TreeSet Eksempel 4:

I dette eksempel udfører vi forskellige NavigableSet-operationer.

Filnavn: TreeSet4.java

java heltal til streng
 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)); } } 

Produktion:

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 Eksempel 5:

I dette eksempel udfører vi forskellige SortedSetSet-operationer.

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

Produktion:

.04 som en brøkdel
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E] 

Java TreeSet Eksempel: Bog

Lad os se et TreeSet-eksempel, hvor vi tilføjer bøger til sættet og udskriver alle bøgerne. Elementerne i TreeSet skal være af en sammenlignelig type. String- og Wrapper-klasser er som standard sammenlignelige. For at tilføje brugerdefinerede objekter i TreeSet skal du implementere den sammenlignelige grænseflade.

Filnavn: TreeSetExample.java

 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-undtagelse i TreeSet

Hvis vi tilføjer et objekt af klassen, der ikke implementerer Comparable-grænsefladen, hæves ClassCast-undtagelsen. Overhold følgende program.

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

Når vi kompilerer ovenstående program, får vi ClassCastException, som vist nedenfor.

 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) 

Forklaring: I ovenstående program er det nødvendigt at implementere en sammenlignelig grænseflade. Det er fordi TreeSet'et opretholder sorteringsrækkefølgen, og for at udføre sorteringen er sammenligningen af ​​forskellige objekter, der bliver indsat i TreeSet'et, must, hvilket opnås ved at implementere Comparable-grænsefladen.