logo

Java TreeSet klasa

TreeSet hijerarhija klasa

Java TreeSet klasa implementira Set sučelje koje koristi stablo za pohranu. Nasljeđuje klasu AbstractSet i implementira sučelje NavigableSet. Objekti klase TreeSet pohranjeni su uzlaznim redoslijedom.

Važne točke o klasi Java TreeSet su:

  • Klasa Java TreeSet sadrži jedinstvene elemente samo kao HashSet.
  • Pristup klasi Java TreeSet i vremena dohvaćanja tiho su brzi.
  • Klasa Java TreeSet ne dopušta nulti element.
  • Klasa Java TreeSet nije sinkronizirana.
  • Klasa Java TreeSet održava uzlazni poredak.
  • Klasa Java TreeSet sadrži jedinstvene elemente samo kao HashSet.
  • Vrijeme pristupa i dohvaćanja klase Java TreeSet prilično je brzo.
  • Klasa Java TreeSet ne dopušta nulte elemente.
  • Klasa Java TreeSet nije sinkronizirana.
  • Klasa Java TreeSet održava uzlazni poredak.
  • TreeSet može dopustiti samo one generičke tipove koji su usporedivi. Na primjer, sučelje Comparable implementira klasa StringBuffer.

Interni rad klase TreeSet

TreeSet se implementira pomoću binarnog stabla pretraživanja, koje se samouravnotežuje baš kao crveno-crno stablo. Stoga operacije kao što su pretraživanje, uklanjanje i dodavanje troše O(log(N)) vremena. Razlog tome leži u stablu koje se samo balansira. On je tu kako bi osigurao da visina stabla nikada ne premaši O(log(N)) za sve navedene operacije. Stoga je to jedna od učinkovitih podatkovnih struktura kako bi se zadržali veliki podaci koji su sortirani i također radi operacije na njima.

Sinkronizacija klase TreeSet

Kao što je već spomenuto, klasa TreeSet nije sinkronizirana. To znači da ako više od jedne niti istodobno pristupa skupu stabla, a jedna od niti koje pristupaju ga modificira, tada se sinkronizacija mora izvršiti ručno. To se obično radi izvođenjem neke sinkronizacije objekata koja enkapsulira skup. Međutim, u slučaju kada takav objekt nije pronađen, tada se skup mora omotati uz pomoć metode Collections.synchronizedSet(). Savjetuje se korištenje metode tijekom vremena kreiranja kako bi se izbjegao nesinkronizirani pristup skupu. Sljedeći isječak koda pokazuje isto.

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

Hijerarhija klase TreeSet

Kao što je prikazano na gornjem dijagramu, klasa Java TreeSet implementira sučelje NavigableSet. Sučelje NavigableSet proširuje sučelja SortedSet, Set, Collection i Iterable u hijerarhijskom redoslijedu.

git dodati --sve

Deklaracija klase TreeSet

Pogledajmo deklaraciju za klasu java.util.TreeSet.

bourne again školjka
 public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable 

Konstruktori Java TreeSet klase

Konstruktor Opis
TreeSet() Koristi se za konstruiranje praznog skupa stabla koje će biti sortirano uzlaznim redoslijedom prema prirodnom redoslijedu skupa stabla.
TreeSet (zbirka c) Koristi se za izgradnju novog skupa stabla koji sadrži elemente zbirke c.
TreeSet(komparator komparator) Koristi se za konstruiranje praznog skupa stabla koje će biti sortirano prema danom komparatoru.
TreeSet(SortedSet s) Koristi se za izgradnju TreeSeta koji sadrži elemente zadanog SortedSeta.

Metode Java TreeSet klase

metoda Opis
Booleov zbroj (E e) Koristi se za dodavanje određenog elementa ovom skupu ako već nije prisutan.
boolean addAll(kolekcija c) Koristi se za dodavanje svih elemenata u navedenoj kolekciji ovom skupu.
E strop (E e) Vraća jednak ili najbliži najveći element navedenog elementa iz skupa ili null ako takav element ne postoji.
komparator komparator() Vraća komparator koji raspoređuje elemente po redu.
Silazni iteratorIterator() Koristi se za ponavljanje elemenata silaznim redoslijedom.
NavigableSet descendingSet() Vraća elemente obrnutim redoslijedom.
E kat (E e) Vraća jednak ili najbliži najmanji element navedenog elementa iz skupa ili null ako takav element ne postoji.
SortedSet headSet(E toElement) Vraća grupu elemenata koji su manji od navedenog elementa.
NavigableSet headSet(E doElement, uključivo booleov) Vraća grupu elemenata koji su manji ili jednaki (ako je uključivo istinito) navedenom elementu.
E više (E e) Vraća najbliži najveći element navedenog elementa iz skupa ili null ako takav element ne postoji.
Iterator iterator() Koristi se za ponavljanje elemenata uzlaznim redoslijedom.
E niže (E e) Vraća najbliži najmanji element navedenog elementa iz skupa ili null ako takav element ne postoji.
E pollFirst() Koristi se za dohvaćanje i uklanjanje najnižeg (prvog) elementa.
E anketaZadnja() Koristi se za dohvaćanje i uklanjanje najvišeg (zadnjeg) elementa.
Spliterator spliterator() Koristi se za stvaranje kasnog povezivanja i brzog kvara spliteratora preko elemenata.
NavigableSet subSet(E fromElement, Boolean fromInclusive, E toElement, Boolean toInclusive) Vraća skup elemenata koji se nalaze između zadanog raspona.
SortedSet subSet(E fromElement, E toElement)) Vraća skup elemenata koji se nalaze između zadanog raspona koji uključuje fromElement i isključuje toElement.
SortedSet tailSet(E fromElement) Vraća skup elemenata koji su veći ili jednaki navedenom elementu.
NavigableSet tailSet(E fromElement, booleov inclusive) Vraća skup elemenata koji su veći ili jednaki (ako je uključivo istinito) navedenom elementu.
boolean sadrži (objekt o) Vraća true ako ovaj skup sadrži navedeni element.
Boolean isEmpty() Vraća true ako ovaj skup ne sadrži elemente.
boolean ukloniti (objekt o) Koristi se za uklanjanje navedenog elementa iz ovog skupa ako je prisutan.
praznina jasno() Koristi se za uklanjanje svih elemenata iz ovog skupa.
Klon objekta() Vraća plitku kopiju ove instance TreeSet-a.
E prvi() Vraća prvi (najniži) element trenutno u ovom sortiranom skupu.
E zadnji() Vraća zadnji (najviši) element trenutno u ovom sortiranom skupu.
int size() Vraća broj elemenata u ovom skupu.

Java TreeSet primjeri

Java TreeSet Primjer 1:

Pogledajmo jednostavan primjer Java TreeSeta.

Naziv 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()); } } } 
Testirajte sada

Izlaz:

Ajay Ravi Vijay 

Java TreeSet primjer 2:

Pogledajmo primjer obilaženja elemenata silaznim redoslijedom.

Naziv 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()); } } } 
Testirajte sada

Izlaz:

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

Java TreeSet Primjer 3:

Pogledajmo primjer za dohvaćanje i uklanjanje najveće i najniže vrijednosti.

Naziv datoteke: TreeSet3.java

sortiranje popisa 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()); } } 

Izlaz:

 Lowest Value: 12 Highest Value: 66 

Java TreeSet primjer 4:

U ovom primjeru izvodimo razne NavigableSet operacije.

Naziv datoteke: TreeSet4.java

java cijeli broj u 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)); } } 

Izlaz:

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

U ovom primjeru izvodimo razne operacije SortedSetSet.

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

Izlaz:

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

Java TreeSet Primjer: Knjiga

Pogledajmo primjer TreeSeta gdje dodajemo knjige u skup i ispisujemo sve knjige. Elementi u TreeSet-u moraju biti usporedivog tipa. Klase String i Wrapper su Comparable prema zadanim postavkama. Za dodavanje korisnički definiranih objekata u TreeSet morate implementirati sučelje Comparable.

Naziv 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&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){>

Iznimka ClassCast u TreeSet-u

Ako dodamo objekt klase koji ne implementira sučelje Comparable, javlja se iznimka ClassCast. Pridržavajte se sljedećeg programa.

pretvoriti u dvostruku Javu

Naziv 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(&apos;The program has been executed successfully.&apos;); } } 

Kada prevedemo gornji program, dobivamo ClassCastException, kao što je prikazano u nastavku.

 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) 

Obrazloženje: U gornjem programu potrebno je implementirati Comparable sučelje. To je zato što TreeSet održava redoslijed sortiranja, a za obavljanje sortiranja obavezna je usporedba različitih objekata koji se umeću u TreeSet, što se postiže implementacijom sučelja Comparable.