Razred Java TreeSet implementira vmesnik Set, ki za shranjevanje uporablja drevo. Podeduje razred AbstractSet in implementira vmesnik NavigableSet. Objekti razreda TreeSet so shranjeni v naraščajočem vrstnem redu.
Pomembne točke o razredu Java TreeSet so:
- Razred Java TreeSet vsebuje edinstvene elemente samo kot HashSet.
- Dostop do razreda Java TreeSet in čas iskanja sta tiho in hitra.
- Razred Java TreeSet ne dovoljuje ničelnega elementa.
- Razred Java TreeSet ni sinhroniziran.
- Razred Java TreeSet vzdržuje naraščajoči vrstni red.
- Razred Java TreeSet vsebuje edinstvene elemente samo kot HashSet.
- Dostop do razreda Java TreeSet in čas iskanja sta precej hitra.
- Razred Java TreeSet ne dovoljuje ničelnih elementov.
- Razred Java TreeSet ni sinhroniziran.
- Razred Java TreeSet vzdržuje naraščajoči vrstni red.
- TreeSet lahko dovoli samo tiste generične tipe, ki so primerljivi. Vmesnik Comparable na primer implementira razred StringBuffer.
Notranje delovanje razreda TreeSet
TreeSet se izvaja z uporabo binarnega iskalnega drevesa, ki se samouravnoteži tako kot rdeče-črno drevo. Zato operacije, kot so iskanje, odstranjevanje in dodajanje, porabijo O(log(N)) časa. Razlog za to je v samouravnotežnem drevesu. Zagotovi, da višina drevesa nikoli ne preseže O(log(N)) za vse omenjene operacije. Zato je ena od učinkovitih podatkovnih struktur za shranjevanje velikih podatkov, ki so razvrščeni, in tudi za izvajanje operacij na njih.
Sinhronizacija razreda TreeSet
Kot že omenjeno zgoraj, razred TreeSet ni sinhroniziran. To pomeni, da če več kot ena nit hkrati dostopa do drevesnega niza in ga ena od dostopajočih niti spremeni, je treba sinhronizacijo izvesti ročno. Običajno se izvede s sinhronizacijo objektov, ki enkapsulira nabor. Če pa tak objekt ni najden, je treba nabor oviti s pomočjo metode Collections.synchronizedSet(). Priporočljivo je, da metodo uporabite med ustvarjanjem, da se izognete nesinhroniziranemu dostopu nabora. Naslednji delček kode prikazuje isto.
TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet);
Hierarhija razreda TreeSet
Kot je prikazano v zgornjem diagramu, razred Java TreeSet implementira vmesnik NavigableSet. Vmesnik NavigableSet razširja vmesnike SortedSet, Set, Collection in Iterable v hierarhičnem vrstnem redu.
funkcije v c
Deklaracija razreda TreeSet
Oglejmo si deklaracijo za razred java.util.TreeSet.
inttostr java
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Konstruktorji razreda Java TreeSet
Konstruktor | Opis |
---|---|
TreeSet() | Uporablja se za izdelavo praznega drevesnega niza, ki bo razvrščen v naraščajočem vrstnem redu glede na naravni vrstni red drevesnega niza. |
TreeSet (Zbirka c) | Uporablja se za izgradnjo novega drevesnega niza, ki vsebuje elemente zbirke c. |
TreeSet(primerjalnik primerjalnik) | Uporablja se za izdelavo praznega drevesnega niza, ki bo razvrščen glede na podani primerjalnik. |
TreeSet(SortedSet s) | Uporablja se za izdelavo TreeSet-a, ki vsebuje elemente danega SortedSet-a. |
Metode razreda Java TreeSet
Metoda | Opis |
---|---|
logični dodatek (E e) | Uporablja se za dodajanje določenega elementa v ta niz, če še ni prisoten. |
logično dodajVse (Zbirka c) | Uporablja se za dodajanje vseh elementov v navedeni zbirki v ta niz. |
E strop (E e) | Vrne enak ali najbližji največji element podanega elementa iz nabora ali pa nič, če takega elementa ni. |
primerjalnik primerjalnik() | Vrne primerjalnik, ki razporedi elemente po vrstnem redu. |
Iterator descendingIterator() | Uporablja se za ponavljanje elementov v padajočem vrstnem redu. |
NavigableSet descendingSet() | Vrne elemente v obratnem vrstnem redu. |
E nadstropje (E e) | Vrne enak ali najbližji najmanjši element podanega elementa iz nabora ali nič, če takega elementa ni. |
SortedSet headSet(E toElement) | Vrne skupino elementov, ki so manjši od podanega elementa. |
NavigableSet headSet (E doElement, vključno z logično vrednostjo) | Vrne skupino elementov, ki so manjši ali enaki podanemu elementu (če je vključujoče res). |
E višje (E e) | Vrne najbližji največji element navedenega elementa iz nabora ali pa nič, če takega elementa ni. |
Iterator iterator() | Uporablja se za ponavljanje elementov v naraščajočem vrstnem redu. |
E nižje (E e) | Vrne najbližji najmanjši element podanega elementa iz nabora ali pa nič, če takega elementa ni. |
E anketaFirst() | Uporablja se za pridobivanje in odstranjevanje najnižjega (prvega) elementa. |
E anketa Zadnja() | Uporablja se za pridobivanje in odstranjevanje najvišjega (zadnjega) elementa. |
Spliterator spliterator() | Uporablja se za ustvarjanje pozno vezave in hitrega razdelilnika nad elementi. |
NavigableSet subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Vrne nabor elementov, ki ležijo med podanim obsegom. |
SortedSet subSet(E fromElement, E toElement)) | Vrne nabor elementov, ki ležijo med danim obsegom, ki vključuje fromElement in izključuje toElement. |
SortedSet tailSet(E fromElement) | Vrne nabor elementov, ki so večji ali enaki podanemu elementu. |
NavigableSet tailSet(E fromElement, logic inclusive) | Vrne nabor elementov, ki so večji ali enaki podanemu elementu (če je inclusive res). |
logično vsebuje (predmet o) | Vrne true, če ta niz vsebuje navedeni element. |
logično isEmpty() | Vrne true, če ta niz ne vsebuje elementov. |
logično odstranjevanje (predmet o) | Uporablja se za odstranitev določenega elementa iz tega niza, če je prisoten. |
void clear() | Uporablja se za odstranitev vseh elementov iz tega niza. |
Klon predmeta() | Vrne plitvo kopijo tega primerka TreeSet. |
prvi E () | Vrne prvi (najnižji) element, ki je trenutno v tem razvrščenem nizu. |
E zadnji() | Vrne zadnji (najvišji) element, ki je trenutno v tem razvrščenem nizu. |
int size() | Vrne število elementov v tem nizu. |
Primeri Java TreeSet
1. primer Java TreeSet:
Oglejmo si preprost primer Java TreeSet.
Ime datoteke: 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()); } } }Preizkusite zdaj
Izhod:
Ajay Ravi Vijay
2. primer Java TreeSet:
Oglejmo si primer prečkanja elementov v padajočem vrstnem redu.
Ime datoteke: 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()); } } }Preizkusite zdaj
Izhod:
Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay
Java TreeSet Primer 3:
Oglejmo si primer za pridobivanje in odstranjevanje najvišje in najnižje vrednosti.
Ime datoteke: TreeSet3.java
mysql ustvari uporabnika
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()); } }
Izhod:
Lowest Value: 12 Highest Value: 66
Java TreeSet Primer 4:
V tem primeru izvajamo različne operacije NavigableSet.
Ime datoteke: TreeSet4.java
java celo število v niz
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)); } }
Izhod:
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 Primer 5:
V tem primeru izvajamo različne operacije SortedSetSet.
Ime datoteke: 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')); } }
Izhod:
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E]
Primer Java TreeSet: Knjiga
Oglejmo si primer TreeSet, kjer dodajamo knjige v niz in tiskamo vse knjige. Elementi v TreeSet morajo biti primerljive vrste. Razreda String in Wrapper sta privzeto primerljiva. Če želite dodati uporabniško definirane predmete v TreeSet, morate implementirati vmesnik Comparable.
Ime datoteke: 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){>
Izjema ClassCast v TreeSet
Če dodamo objekt razreda, ki ne implementira primerljivega vmesnika, se sproži izjema ClassCast. Upoštevajte naslednji program.
kako odpreti datoteko v Javi
Ime datoteke: 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.'); } }
Ko prevedemo zgornji program, dobimo izjemo ClassCastException, kot je prikazano spodaj.
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)
Pojasnilo: V zgornjem programu je treba implementirati primerljiv vmesnik. To je zato, ker TreeSet ohranja vrstni red razvrščanja in je za izvedbo razvrščanja potrebna primerjava različnih predmetov, ki so vstavljeni v TreeSet, kar se doseže z implementacijo vmesnika Comparable.