logo

Java TreeSet-klassen

TreeSet klassehierarki

Java TreeSet-klassen implementerer Set-grensesnittet som bruker et tre for lagring. Den arver AbstractSet-klassen og implementerer NavigableSet-grensesnittet. Objektene til TreeSet-klassen lagres i stigende rekkefølge.

De viktige punktene om Java TreeSet-klassen er:

  • Java TreeSet-klassen inneholder unike elementer bare som HashSet.
  • Java TreeSet-klassetilgang og gjenfinningstider er stille raskt.
  • Java TreeSet-klassen tillater ikke null-element.
  • Java TreeSet-klassen er ikke synkronisert.
  • Java TreeSet-klassen opprettholder stigende rekkefølge.
  • Java TreeSet-klassen inneholder unike elementer bare som HashSet.
  • Java TreeSet-klassetilgang og gjenfinningstider er ganske raske.
  • Java TreeSet-klassen tillater ikke null-elementer.
  • Java TreeSet-klassen er ikke-synkronisert.
  • Java TreeSet-klassen opprettholder stigende rekkefølge.
  • TreeSet kan bare tillate de generiske typene som er sammenlignbare. For eksempel blir The Comparable-grensesnittet implementert av StringBuffer-klassen.

Internt arbeid i TreeSet Class

TreeSet blir implementert ved hjelp av et binært søketre, som er selvbalanserende akkurat som et rød-svart tre. Derfor bruker operasjoner som å søke, fjerne og legge til O(log(N))-tid. Årsaken bak dette er der i det selvbalanserende treet. Den er der for å sikre at trehøyden aldri overstiger O(log(N)) for alle de nevnte operasjonene. Derfor er det en av de effektive datastrukturene for å holde de store dataene som er sortert og også for å gjøre operasjoner på den.

Synkronisering av TreeSet Class

Som allerede nevnt ovenfor, er TreeSet-klassen ikke synkronisert. Det betyr at hvis mer enn én tråd samtidig får tilgang til et tresett, og en av tilgangstrådene endrer det, må synkroniseringen gjøres manuelt. Det gjøres vanligvis ved å gjøre noe objektsynkronisering som innkapsler settet. Men i tilfellet der ikke noe slikt objekt blir funnet, må settet pakkes inn ved hjelp av Collections.synchronizedSet()-metoden. Det anbefales å bruke metoden under opprettelsestiden for å unngå usynkronisert tilgang til settet. Følgende kodebit viser det samme.

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

Hierarki av TreeSet-klassen

Som vist i diagrammet ovenfor implementerer Java TreeSet-klassen NavigableSet-grensesnittet. NavigableSet-grensesnittet utvider grensesnittene SortedSet, Set, Collection og Iterable i hierarkisk rekkefølge.

amisha patel

TreeSet-klasseerklæring

La oss se erklæringen for java.util.TreeSet-klassen.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Konstruktører av Java TreeSet Class

Konstruktør Beskrivelse
TreeSet() Den brukes til å konstruere et tomt tresett som vil bli sortert i stigende rekkefølge i henhold til den naturlige rekkefølgen til tresettet.
TreeSet (Samling c) Den brukes til å bygge et nytt tresett som inneholder elementene i samlingen c.
TreeSet (Komparator komparator) Den brukes til å konstruere et tomt tresett som vil bli sortert i henhold til gitt komparator.
TreeSet(SortedSet s) Det brukes til å bygge et TreeSet som inneholder elementene i det gitte SortedSet.

Metoder for Java TreeSet Class

Metode Beskrivelse
boolsk add(E e) Den brukes til å legge til det angitte elementet til dette settet hvis det ikke allerede er til stede.
boolesk addAll(Samling c) Den brukes til å legge til alle elementene i den angitte samlingen til dette settet.
E tak(E e) Det returnerer det lik eller nærmest største elementet av det spesifiserte elementet fra settet, eller null det er ikke noe slikt element.
Komparator komparator() Den returnerer en komparator som ordner elementene i rekkefølge.
Iterator descendingIterator() Den brukes til å iterere elementene i synkende rekkefølge.
NavigableSet descendingSet() Den returnerer elementene i omvendt rekkefølge.
E etasje(E e) Den returnerer det like eller det nærmeste minste elementet av det spesifiserte elementet fra settet, eller null det er ikke noe slikt element.
SortedSet headset(E toElement) Den returnerer gruppen av elementer som er mindre enn det angitte elementet.
NavigableSet-hodesett (E toElement, boolesk inkludert) Den returnerer gruppen av elementer som er mindre enn eller lik (hvis inklusive er sant) det angitte elementet.
E høyere(E e) Den returnerer det nærmeste største elementet av det spesifiserte elementet fra settet, eller null det er ikke noe slikt element.
Iterator iterator() Den brukes til å iterere elementene i stigende rekkefølge.
E lavere(E e) Den returnerer det nærmeste minste elementet av det spesifiserte elementet fra settet, eller null det er ikke noe slikt element.
E pollFirst() Den brukes til å hente og fjerne det laveste (første) elementet.
E pollLast() Den brukes til å hente og fjerne det høyeste (siste) elementet.
Spliterator splitterator() Den brukes til å lage en sen-bindende og feil-rask splitter over elementene.
NavigableSet-delsett(E fraElement, boolsk fraInklusive, E tilElement, Boolsk tilInklusive) Den returnerer et sett med elementer som ligger mellom det gitte området.
SortedSet subset(E fromElement, E toElement)) Den returnerer et sett med elementer som ligger mellom det gitte området som inkluderer fromElement og ekskluderer toElement.
SortedSet tailSet(E fromElement) Den returnerer et sett med elementer som er større enn eller lik det angitte elementet.
NavigableSet tailSet(E fromElement, boolean inklusive) Den returnerer et sett med elementer som er større enn eller lik (hvis inkludert er sant) det angitte elementet.
boolsk inneholder(Objekt o) Det returnerer sant hvis dette settet inneholder det angitte elementet.
boolsk er tom() Det returnerer sant hvis dette settet ikke inneholder noen elementer.
boolsk fjern (Objekt o) Den brukes til å fjerne det angitte elementet fra dette settet hvis det er til stede.
void clear() Den brukes til å fjerne alle elementene fra dette settet.
Objekt klone() Den returnerer en grunn kopi av denne TreeSet-forekomsten.
E først() Den returnerer det første (laveste) elementet for øyeblikket i dette sorterte settet.
E siste() Den returnerer det siste (høyeste) elementet for øyeblikket i dette sorterte settet.
int størrelse() Den returnerer antall elementer i dette settet.

Eksempler på Java TreeSet

Java TreeSet Eksempel 1:

La oss se et enkelt 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 nå

Produksjon:

Ajay Ravi Vijay 

Java TreeSet Eksempel 2:

La oss se et eksempel på å krysse elementer i synkende rekkefølge.

hva 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 nå

Produksjon:

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

Java TreeSet Eksempel 3:

La oss se et eksempel for å hente og fjerne den høyeste og laveste verdien.

Filnavn: TreeSet3.java

hva er et grensesnitt
 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()); } } 

Produksjon:

 Lowest Value: 12 Highest Value: 66 

Java TreeSet Eksempel 4:

I dette eksemplet utfører vi forskjellige NavigableSet-operasjoner.

Filnavn: TreeSet4.java

konverter streng til dato
 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)); } } 

Produksjon:

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 eksemplet utfører vi forskjellige SortedSetSet-operasjoner.

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

Produksjon:

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

Java TreeSet Eksempel: Bok

La oss se et TreeSet-eksempel der vi legger til bøker i settet og skriver ut alle bøkene. Elementene i TreeSet må være av en sammenlignbar type. String- og Wrapper-klasser er sammenlignbare som standard. For å legge til brukerdefinerte objekter i TreeSet, må du implementere Comparable-grensesnittet.

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

Hvis vi legger til et objekt av klassen som ikke implementerer Comparable-grensesnittet, heves ClassCast-unntaket. Følg 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 programmet ovenfor, 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 programmet ovenfor er det nødvendig å implementere et sammenlignbart grensesnitt. Det er fordi TreeSet opprettholder sorteringsrekkefølgen, og for å utføre sorteringen må sammenligningen av forskjellige objekter som settes inn i TreeSet, som oppnås ved å implementere Comparable-grensesnittet.