logo

Java TreeSet klasė

TreeSet klasės hierarchija

„Java TreeSet“ klasė įgyvendina „Set“ sąsają, kuri saugojimui naudoja medį. Jis paveldi AbstractSet klasę ir įgyvendina NavigableSet sąsają. TreeSet klasės objektai saugomi didėjančia tvarka.

Svarbūs dalykai apie „Java TreeSet“ klasę yra šie:

  • „Java TreeSet“ klasėje yra tik unikalių elementų, tokių kaip „HashSet“.
  • „Java TreeSet“ klasės prieigos ir gavimo laikas yra tylus ir greitas.
  • Java TreeSet klasė neleidžia null elemento.
  • „Java TreeSet“ klasė nėra sinchronizuota.
  • „Java TreeSet“ klasė palaiko didėjančią tvarką.
  • „Java TreeSet“ klasėje yra tik unikalių elementų, tokių kaip „HashSet“.
  • „Java TreeSet“ klasės prieigos ir gavimo laikas yra gana greitas.
  • „Java TreeSet“ klasė neleidžia naudoti nulinių elementų.
  • „Java TreeSet“ klasė yra nesinchronizuota.
  • „Java TreeSet“ klasė palaiko didėjančią tvarką.
  • TreeSet gali leisti tik tuos bendruosius tipus, kurie yra palyginami. Pavyzdžiui, „Comparable“ sąsają įgyvendina „StringBuffer“ klasė.

„TreeSet“ klasės vidinis darbas

TreeSet yra įdiegtas naudojant dvejetainį paieškos medį, kuris savaime išsibalansuoja kaip raudonai juodas medis. Todėl tokios operacijos kaip paieška, pašalinimas ir pridėjimas sunaudoja O(log(N)) laiką. To priežastis slypi savaiminio balansavimo medyje. Jis skirtas užtikrinti, kad medžio aukštis niekada neviršytų O(log(N)) atliekant visas minėtas operacijas. Todėl tai yra viena iš efektyvių duomenų struktūrų, leidžiančių išlaikyti didelius rūšiuojamus duomenis ir atlikti su jais susijusias operacijas.

„TreeSet“ klasės sinchronizavimas

Kaip jau minėta aukščiau, TreeSet klasė nėra sinchronizuota. Tai reiškia, kad jei daugiau nei viena gija vienu metu pasiekia medžio rinkinį, o viena iš besikreipiančių gijų ją modifikuoja, sinchronizavimas turi būti atliekamas rankiniu būdu. Paprastai tai atliekama atliekant tam tikrą objektų sinchronizavimą, kuris apima rinkinį. Tačiau tuo atveju, kai tokio objekto nerasta, rinkinys turi būti suvyniotas naudojant Collections.synchronizedSet() metodą. Patartina šį metodą naudoti kūrimo metu, kad būtų išvengta nesinchroninės prieigos prie rinkinio. Šis kodo fragmentas rodo tą patį.

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

TreeSet klasės hierarchija

Kaip parodyta aukščiau esančioje diagramoje, „Java TreeSet“ klasė įgyvendina „NavigableSet“ sąsają. „NavigableSet“ sąsaja išplečia „SortedSet“, „Set“, „Collection“ ir „Iterable“ sąsajas hierarchine tvarka.

styginių kūrimo priemonė java

TreeSet klasės deklaracija

Pažiūrėkime java.util.TreeSet klasės deklaraciją.

 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Java TreeSet klasės konstruktoriai

Konstruktorius apibūdinimas
Medžių rinkinys () Jis naudojamas tuščiam medžių rinkiniui sukurti, kuris bus rūšiuojamas didėjančia tvarka pagal natūralią medžių rinkinio tvarką.
Medžių rinkinys (c rinkinys) Jis naudojamas kuriant naują medžio rinkinį, kuriame yra kolekcijos c elementai.
TreeSet (palyginimo priemonė) Jis naudojamas tuščiam medžių rinkiniui sudaryti, kuris bus surūšiuotas pagal pateiktą lyginamąjį elementą.
Medžių rinkinys (surūšiuoti rinkiniai) Jis naudojamas kuriant TreeSet, kuriame yra nurodyto Rūšiuoto rinkinio elementai.

Java TreeSet klasės metodai

Metodas apibūdinimas
loginis priedas (E e) Jis naudojamas nurodytam elementui įtraukti į šį rinkinį, jei jo dar nėra.
loginis pridėti viską (rinkinys c) Jis naudojamas norint į šį rinkinį įtraukti visus nurodytos kolekcijos elementus.
E lubos (E e) Jis grąžina lygų arba artimiausią didžiausią nurodyto elemento elementą iš aibės arba nulis tokio elemento nėra.
Palyginimo priemonė palyginimo priemonė () Jis grąžina lyginamąjį elementą, kuris išdėsto elementus eilės tvarka.
Iteratorius descendingIterator() Jis naudojamas elementams kartoti mažėjančia tvarka.
NavigableSet descendingSet() Jis grąžina elementus atvirkštine tvarka.
E aukštas (E e) Jis grąžina lygų arba artimiausią mažiausią nurodyto elemento elementą iš rinkinio arba nulis tokio elemento nėra.
SortedSet headSet (E į elementą) Jis grąžina elementų grupę, kuri yra mažesnė už nurodytą elementą.
NavigableSet headSet (E toElement, loginis imtinai) Jis grąžina elementų grupę, kuri yra mažesnė arba lygi (jei imtinai yra tiesa) nurodytam elementui.
E aukštesnis (E e) Jis grąžina artimiausią didžiausią nurodyto elemento elementą iš aibės arba nulis tokio elemento nėra.
Iteratoriaus iteratorius () Jis naudojamas elementams kartoti didėjančia tvarka.
E žemesnis (E e) Jis grąžina artimiausią mažiausią nurodyto elemento elementą iš rinkinio arba nulis tokio elemento nėra.
E apklausaFirst() Jis naudojamas žemiausiam (pirmajam) elementui nuskaityti ir pašalinti.
E apklausa Paskutinė() Jis naudojamas gauti ir pašalinti aukščiausią (paskutinį) elementą.
Skirstytuvo skirstytuvas() Jis naudojamas norint sukurti vėlai surišamą ir greitą elementų skirstytuvą.
„NavigableSet“ poaibis (E nuo elemento, loginis nuo įtraukiamas, iš E iki elemento, loginis į įtrauktas) Jis grąžina elementų, esančių tarp nurodyto diapazono, rinkinį.
Rūšiuoto rinkinio poaibis (E nuo elemento, E iki elemento)) Jis grąžina elementų rinkinį, esantį tarp nurodyto diapazono, kuris apima fromElement ir neįtraukia toElement.
Rūšiuotas rinkinys tailSet (E iš elemento) Jis grąžina elementų rinkinį, kuris yra didesnis arba lygus nurodytam elementui.
NavigableSet tailSet (E iš elemento, loginis imtinai) Jis grąžina elementų rinkinį, kuris yra didesnis arba lygus nurodytam elementui (jei imtinai yra tiesa).
loginis yra (O objektas) Grąžinama tiesa, jei šiame rinkinyje yra nurodytas elementas.
loginis yra tuščias() Grąžinama tiesa, jei šiame rinkinyje nėra elementų.
loginis pašalinimas (O objektas) Jis naudojamas nurodytam elementui pašalinti iš šio rinkinio, jei jis yra.
tuščias aiškus () Jis naudojamas pašalinti visus elementus iš šio rinkinio.
Objekto klonas () Jis grąžina negilią šio TreeSet egzemplioriaus kopiją.
E pirmas () Jis grąžina pirmąjį (žemiausią) elementą šiuo metu šiame surūšiuotame rinkinyje.
E paskutinis () Jis grąžina paskutinį (aukščiausią) elementą šiuo metu šiame surūšiuotame rinkinyje.
int dydis () Jis grąžina šio rinkinio elementų skaičių.

Java TreeSet pavyzdžiai

Java TreeSet 1 pavyzdys:

Pažiūrėkime paprastą Java TreeSet pavyzdį.

Failo pavadinimas: 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()); } } } 
Išbandykite dabar

Išvestis:

java eilučių kūrėjas
Ajay Ravi Vijay 

Java TreeSet 2 pavyzdys:

Pažiūrėkime elementų perėjimo mažėjimo tvarka pavyzdį.

Failo pavadinimas: 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()); } } } 
Išbandykite dabar

Išvestis:

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

„Java TreeSet“ 3 pavyzdys:

Pažiūrėkime pavyzdį, kaip gauti ir pašalinti didžiausią ir mažiausią reikšmę.

Failo pavadinimas: TreeSet3.java

eilučių masyvo kūrimas java
 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()); } } 

Išvestis:

 Lowest Value: 12 Highest Value: 66 

„Java TreeSet“ 4 pavyzdys:

Šiame pavyzdyje atliekame įvairias NavigableSet operacijas.

Failo pavadinimas: TreeSet4.java

755 chmod
 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)); } } 

Išvestis:

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

Šiame pavyzdyje atliekame įvairias SortedSetSet operacijas.

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

Išvestis:

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

Java TreeSet pavyzdys: knyga

Pažiūrėkime „TreeSet“ pavyzdį, kai į rinkinį pridedame knygų ir spausdiname visas knygas. „TreeSet“ elementai turi būti palyginamo tipo. Pagal numatytuosius nustatymus eilutės ir įvyniojimo klasės yra palyginamos. Norėdami įtraukti vartotojo apibrėžtus objektus į TreeSet, turite įdiegti palyginimo sąsają.

Failo pavadinimas: TreeSetExample.java

java hello world pavyzdys
 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“ išimtis „TreeSet“.

Jei pridedame klasės objektą, kuris neįdiegė palyginimo sąsajos, iškeliama ClassCast išimtis. Stebėkite šią programą.

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

Kai sudarome aukščiau pateiktą programą, gauname ClassCastException, kaip parodyta toliau.

 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) 

Paaiškinimas: Aukščiau pateiktoje programoje reikia įdiegti palyginamą sąsają. Taip yra todėl, kad „TreeSet“ palaiko rūšiavimo tvarką, o norint atlikti rūšiavimą, būtina palyginti skirtingus objektus, kurie įterpiami į „TreeSet“, o tai pasiekiama įdiegus palyginimo sąsają.