Java TreeSet klase īsteno saskarni Set, kas glabāšanai izmanto koku. Tas pārmanto AbstractSet klasi un ievieš NavigableSet saskarni. TreeSet klases objekti tiek saglabāti augošā secībā.
Svarīgi punkti par Java TreeSet klasi ir šādi:
- Java TreeSet klase satur tikai unikālus elementus, piemēram, HashSet.
- Java TreeSet klases piekļuves un izguves laiki ir klusi un ātri.
- Java TreeSet klase neatļauj null elementu.
- Java TreeSet klase nav sinhronizēta.
- Java TreeSet klase saglabā augošu secību.
- Java TreeSet klase satur tikai unikālus elementus, piemēram, HashSet.
- Java TreeSet klases piekļuves un izguves laiki ir diezgan ātri.
- Java TreeSet klase neatļauj nulles elementus.
- Java TreeSet klase nav sinhronizēta.
- Java TreeSet klase saglabā augošu secību.
- TreeSet var atļaut tikai tos vispārīgos tipus, kas ir salīdzināmi. Piemēram, salīdzināmo saskarni ievieš klase StringBuffer.
TreeSet klases iekšējā darbība
TreeSet tiek ieviests, izmantojot bināro meklēšanas koku, kas ir pašlīdzsvarojošs tāpat kā sarkans-melnais koks. Tāpēc tādas darbības kā meklēšana, noņemšana un pievienošana patērē O(log(N)) laiku. Iemesls tam ir pašlīdzsvarošanās kokā. Tas ir paredzēts, lai visās minētajās darbībās koka augstums nekad nepārsniegtu O(log(N)). Tāpēc tā ir viena no efektīvajām datu struktūrām, lai saglabātu lielos sakārtotos datus un arī veiktu ar tiem darbības.
TreeSet klases sinhronizācija
Kā jau minēts iepriekš, TreeSet klase nav sinhronizēta. Tas nozīmē, ja vairāk nekā viens pavediens vienlaikus piekļūst koka kopai un viens no piekļuves pavedieniem to modificē, sinhronizācija jāveic manuāli. Parasti to veic, veicot kādu objektu sinhronizāciju, kas iekapsulē kopu. Taču gadījumā, ja šāds objekts netiek atrasts, tad kopa ir jāietver ar metodes Collections.synchronizedSet() palīdzību. Šo metodi ieteicams izmantot izveides laikā, lai izvairītos no nesinhronizētas piekļuves komplektam. Nākamais koda fragments parāda to pašu.
TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet);
TreeSet klases hierarhija
Kā parādīts iepriekš redzamajā diagrammā, Java TreeSet klase ievieš NavigableSet saskarni. NavigableSet interfeiss paplašina SortedSet, Set, Collection un Iterable saskarnes hierarhiskā secībā.
.tif failu
TreeSet klases deklarācija
Apskatīsim klases java.util.TreeSet deklarāciju.
system.out.println
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Java TreeSet klases konstruktori
Konstruktors | Apraksts |
---|---|
TreeSet() | To izmanto, lai izveidotu tukšu koku kopu, kas tiks sakārtota augošā secībā atbilstoši koku kopas dabiskajai secībai. |
TreeSet (kolekcija c) | To izmanto, lai izveidotu jaunu koku komplektu, kas satur kolekcijas elementus c. |
TreeSet (salīdzināšanas līdzeklis) | To izmanto, lai izveidotu tukšu koku kopu, kas tiks sakārtota atbilstoši dotajam salīdzinājumam. |
Koku kopa (šķirotās kopas) | To izmanto, lai izveidotu TreeSet, kas satur dotās SortedSet elementus. |
Java TreeSet klases metodes
Metode | Apraksts |
---|---|
Būla pievienošana(E e) | To izmanto, lai šai kopai pievienotu norādīto elementu, ja tas vēl nav pieejams. |
Būla vērtība addAll (kolekcija c) | To izmanto, lai šai kopai pievienotu visus norādītās kolekcijas elementus. |
E griesti (E e) | Tas atgriež vienādu vai tuvāko norādītā elementa lielāko elementu no kopas, vai nulle šāda elementa nav. |
Comparator Comparator() | Tas atgriež salīdzinātāju, kas sakārto elementus secībā. |
Iterator descendingIterator() | To izmanto, lai atkārtotu elementus dilstošā secībā. |
NavigableSet descendingSet() | Tas atgriež elementus apgrieztā secībā. |
E stāvs (E e) | Tas atgriež vienādu vai tuvāko norādītā elementa mazāko elementu no kopas, vai nulle šāda elementa nav. |
SortedSet headset (E-Element) | Tas atgriež elementu grupu, kas ir mazāka par norādīto elementu. |
NavigableSet headSet (E-Element, Būla vērtība ieskaitot) | Tas atgriež elementu grupu, kas ir mazāka par norādīto elementu vai vienāda ar to (ja, ieskaitot ir patiesa). |
E augstāks(E e) | Tas atgriež norādītā elementa tuvāko lielāko elementu no kopas vai nulle šāda elementa nav. |
Iteratora iterators() | To izmanto elementu atkārtošanai augošā secībā. |
E zemāks (E e) | Tas atgriež tuvāko vismazāko norādītā elementa elementu no kopas vai nulle šāda elementa nav. |
E aptaujaFirst() | To izmanto, lai izgūtu un noņemtu zemāko (pirmo) elementu. |
E aptauja Pēdējā() | To izmanto, lai izgūtu un noņemtu augstāko (pēdējo) elementu. |
Sadalītāja sadalītājs() | To izmanto, lai izveidotu vēlu saistošu un ātru atteices sadalītāju virs elementiem. |
NavigableSet apakškopa (E no elementa, Būla no iekļaujoša, E uz elementu, Būla uz iekļaujošu) | Tas atgriež elementu kopu, kas atrodas starp norādīto diapazonu. |
Kārtotās kopas apakškopa (E no elementa, E līdz elementam)) | Tas atgriež elementu kopu, kas atrodas starp doto diapazonu, kas ietver fromElement un izslēdz toElement. |
SortedSet astes komplekts (E no elementa) | Tas atgriež elementu kopu, kas ir lielāka vai vienāda ar norādīto elementu. |
NavigableSet astes kopa (E no Element, Būla vērtība ieskaitot) | Tas atgriež elementu kopu, kas ir lielāka vai vienāda ar norādīto elementu (ja, ieskaitot ir patiesa). |
Būla saturs(Objekts o) | Tas atgriež patiesu, ja šajā kopā ir norādītais elements. |
Būla vērtība ir tukša() | Tas atgriež patiesu, ja šajā komplektā nav elementu. |
Būla noņemšana (Objekts o) | To izmanto, lai noņemtu norādīto elementu no šīs kopas, ja tas ir. |
tukšums skaidrs () | To izmanto, lai noņemtu visus elementus no šī komplekta. |
Objekta klons () | Tas atgriež seklu šīs TreeSet instances kopiju. |
E vispirms () | Tas atgriež pirmo (zemāko) elementu pašlaik šajā sakārtotajā kopā. |
E pēdējais () | Tas atgriež pēdējo (augstāko) elementu pašlaik šajā sakārtotajā kopā. |
int size () | Tas atgriež šīs kopas elementu skaitu. |
Java TreeSet piemēri
Java TreeSet 1. piemērs:
Apskatīsim vienkāršu Java TreeSet piemēru.
Faila nosaukums: 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()); } } }Izmēģiniet to tūlīt
Izvade:
Ajay Ravi Vijay
Java TreeSet 2. piemērs:
Apskatīsim piemēru elementu šķērsošanai dilstošā secībā.
Faila nosaukums: 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()); } } }Izmēģiniet to tūlīt
Izvade:
Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay
Java TreeSet 3. piemērs:
Apskatīsim piemēru augstākās un zemākās vērtības izgūšanai un noņemšanai.
Faila nosaukums: TreeSet3.java
java kodu piemēri
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()); } }
Izvade:
Lowest Value: 12 Highest Value: 66
Java TreeSet 4. piemērs:
Šajā piemērā mēs veicam dažādas NavigableSet darbības.
Faila nosaukums: TreeSet4.java
konvertēt virkni uz datumu
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)); } }
Izvade:
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. piemērs:
Šajā piemērā mēs veicam dažādas SortedSetSet darbības.
Faila nosaukums: 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')); } }
Izvade:
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E]
Java TreeSet piemērs: grāmata
Apskatīsim TreeSet piemēru, kur mēs pievienojam grāmatas komplektam un drukājam visas grāmatas. TreeSet elementiem ir jābūt salīdzināma tipa. Virknes un Iesaiņojuma klases pēc noklusējuma ir salīdzināmas. Lai pievienotu lietotāja definētus objektus TreeSet, ir jāievieš salīdzināmā saskarne.
Faila nosaukums: 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>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 & 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('The program has been executed successfully.'); } } </pre> <p>When we compile the above program, we get the ClassCastException, as shown below.</p> <pre> Exception in thread 'main' java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap') 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 izņēmums pakalpojumā TreeSet
Ja pievienojam klases objektu, kas neievieš salīdzināmo saskarni, tiek paaugstināts ClassCast izņēmums. Ievērojiet tālāk norādīto programmu.
tīģera lauvas atšķirība
Faila nosaukums: 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('The program has been executed successfully.'); } }
Kad mēs apkopojam iepriekš minēto programmu, mēs iegūstam ClassCastException, kā parādīts zemāk.
Exception in thread 'main' java.lang.ClassCastException: class Employee cannot be cast to class java.lang.Comparable (Employee is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap') 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)
Paskaidrojums: Iepriekš minētajā programmā ir jāievieš salīdzināms interfeiss. Tas ir tāpēc, ka TreeSet uztur šķirošanas secību, un, lai veiktu kārtošanu, ir jāsalīdzina dažādi objekti, kas tiek ievietoti TreeSet, kas tiek paveikts, ieviešot salīdzināmo saskarni.