Java TreeSet -luokka toteuttaa Set-rajapinnan, joka käyttää puuta tallennukseen. Se perii AbstractSet-luokan ja toteuttaa NavigableSet-rajapinnan. TreeSet-luokan objektit tallennetaan nousevassa järjestyksessä.
Tärkeitä asioita Java TreeSet -luokasta ovat:
- Java TreeSet -luokka sisältää vain ainutlaatuisia elementtejä, kuten HashSet.
- Java TreeSet -luokan pääsy- ja hakuajat ovat hiljaisia ja nopeita.
- Java TreeSet -luokka ei salli null-elementtiä.
- Java TreeSet -luokkaa ei ole synkronoitu.
- Java TreeSet -luokka ylläpitää nousevaa järjestystä.
- Java TreeSet -luokka sisältää vain ainutlaatuisia elementtejä, kuten HashSet.
- Java TreeSet -luokan pääsy- ja hakuajat ovat melko nopeita.
- Java TreeSet -luokka ei salli nollaelementtejä.
- Java TreeSet -luokkaa ei ole synkronoitu.
- Java TreeSet -luokka ylläpitää nousevaa järjestystä.
- TreeSet voi sallia vain ne yleiset tyypit, jotka ovat vertailukelpoisia. Esimerkiksi Comparable-liittymää toteuttaa StringBuffer-luokka.
TreeSet-luokan sisäinen toiminta
TreeSet toteutetaan binäärihakupuulla, joka tasapainottuu aivan kuten punainen-musta puu. Siksi toiminnot, kuten haku, poistaminen ja lisääminen, kuluttavat O(log(N))-aikaa. Syy tähän on itsetasapainottavassa puussa. Sen avulla varmistetaan, että puun korkeus ei koskaan ylitä arvoa O(log(N)) kaikissa mainituissa toimissa. Siksi se on yksi tehokkaista tietorakenteista suuren lajittelevan datan säilyttämiseksi ja myös operaatioiden suorittamiseksi.
TreeSet-luokan synkronointi
Kuten edellä jo mainittiin, TreeSet-luokkaa ei synkronoida. Se tarkoittaa, että jos useampi kuin yksi säiettä käyttää samanaikaisesti puujoukkoa ja yksi käyttävistä säikeistä muokkaa sitä, synkronointi on suoritettava manuaalisesti. Se tehdään yleensä tekemällä jokin objektin synkronointi, joka kapseloi joukon. Kuitenkin, jos tällaista objektia ei löydy, joukko on käärittävä Collections.synchronizedSet()-metodin avulla. On suositeltavaa käyttää menetelmää luomisen aikana, jotta vältetään joukon synkronoimaton pääsy. Seuraava koodinpätkä näyttää saman.
TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet);
TreeSet-luokan hierarkia
Kuten yllä olevassa kaaviossa näkyy, Java TreeSet -luokka toteuttaa NavigableSet-rajapinnan. NavigableSet-käyttöliittymä laajentaa SortedSet-, Set-, Collection- ja Iterable-rajapintoja hierarkkisessa järjestyksessä.
ero kahden merkkijonon välillä python
TreeSet-luokkailmoitus
Katsotaanpa java.util.TreeSet-luokan ilmoitus.
java on tyhjä
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Java TreeSet -luokan rakentajat
Rakentaja | Kuvaus |
---|---|
TreeSet() | Sitä käytetään rakentamaan tyhjä puujoukko, joka lajitellaan nousevaan järjestykseen puujoukon luonnollisen järjestyksen mukaan. |
TreeSet (kokoelma c) | Sitä käytetään rakentamaan uusi puujoukko, joka sisältää kokoelman c elementtejä. |
TreeSet (vertailija) | Sitä käytetään rakentamaan tyhjä puujoukko, joka lajitellaan annetun vertailijan mukaan. |
Puujoukko(lajitellut joukot) | Sitä käytetään TreeSetin rakentamiseen, joka sisältää tietyn SortedSetin elementit. |
Java TreeSet -luokan menetelmät
Menetelmä | Kuvaus |
---|---|
boolen lisäys(E e) | Sitä käytetään lisäämään määritetty elementti tähän joukkoon, jos sitä ei vielä ole. |
boolean addAll(kokoelma c) | Sitä käytetään lisäämään kaikki määritetyn kokoelman elementit tähän joukkoon. |
E katto (E e) | Se palauttaa määritetyn elementin yhtä suuren tai lähimmän suurimman alkion joukosta, tai nolla, sellaista alkiota ei ole. |
Comparator komparaattori() | Se palauttaa vertailijan, joka järjestää elementit järjestykseen. |
Iterator descendingIterator() | Sitä käytetään elementtien iteroimiseen laskevassa järjestyksessä. |
NavigableSet descendingSet() | Se palauttaa elementit käänteisessä järjestyksessä. |
E kerros (E e) | Se palauttaa määritetyn elementin yhtä suuren tai lähimmän pienimmän alkion joukosta, tai nolla sellaista elementtiä ei ole. |
SortedSet headset (E toElement) | Se palauttaa ryhmän elementtejä, jotka ovat pienempiä kuin määritetty elementti. |
NavigableSet headSet (E toElement, boolean mukaan lukien) | Se palauttaa ryhmän elementtejä, jotka ovat pienempiä tai yhtä suuria kuin (jos inclusive on tosi) määritetty elementti. |
E korkeampi(E e) | Se palauttaa määritetyn elementin lähimmän suurimman elementin joukosta tai nolla, sellaista elementtiä ei ole. |
Iteraattori iteraattori() | Sitä käytetään elementtien iteroimiseen nousevassa järjestyksessä. |
E alempi (E e) | Se palauttaa määritetyn elementin lähimmän pienimmän elementin joukosta tai nolla sellaista elementtiä ei ole. |
E kysely Ensimmäinen() | Sitä käytetään alimman (ensimmäisen) elementin hakemiseen ja poistamiseen. |
E kysely Viimeinen() | Sitä käytetään korkeimman (viimeisen) elementin hakemiseen ja poistamiseen. |
Splitter spliterator() | Sitä käytetään luomaan myöhään sitova ja nopea jakaja elementtien päälle. |
NavigableSet-alijoukko (E elementistä, looginen arvo inclusivesta, E elementistä, looginen osajoukko) | Se palauttaa joukon elementtejä, jotka ovat annetun alueen välissä. |
Lajiteltu joukko (E elementistä, E elementistä)) | Se palauttaa joukon elementtejä, jotka ovat tietyn alueen välissä, joka sisältää fromElementin ja jättää pois toElementin. |
SortedSet tailSet(E elementistä) | Se palauttaa joukon elementtejä, jotka ovat suurempia tai yhtä suuria kuin määritetty elementti. |
NavigableSet tailSet (E elementistä, boolean mukaan lukien) | Se palauttaa joukon elementtejä, jotka ovat suurempia tai yhtä suuria kuin (jos inclusive on tosi) määritetty elementti. |
boolean sisältää (Objekti o) | Se palauttaa tosi, jos tämä joukko sisältää määritetyn elementin. |
boolean isEmpty() | Se palauttaa tosi, jos tämä joukko ei sisällä elementtejä. |
boolen poisto (objekti o) | Sitä käytetään määritetyn elementin poistamiseen tästä joukosta, jos se on olemassa. |
void clear () | Sitä käytetään kaikkien elementtien poistamiseen tästä sarjasta. |
Objektin klooni() | Se palauttaa matalan kopion tästä TreeSet-instanssista. |
E ensin () | Se palauttaa ensimmäisen (alimman) elementin tällä hetkellä tässä lajiteltussa joukossa. |
E viimeinen() | Se palauttaa viimeisen (korkeimman) elementin tällä hetkellä tässä lajiteltussa joukossa. |
int size () | Se palauttaa tämän joukon elementtien määrän. |
Java TreeSet -esimerkkejä
Java TreeSet -esimerkki 1:
Katsotaanpa yksinkertainen esimerkki Java TreeSetistä.
Tiedoston nimi: 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()); } } }Testaa nyt
Lähtö:
Ajay Ravi Vijay
Java TreeSet -esimerkki 2:
Katsotaanpa esimerkkiä elementtien kulkemisesta laskevassa järjestyksessä.
Tiedoston nimi: 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()); } } }Testaa nyt
Lähtö:
Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay
Java TreeSet -esimerkki 3:
Katsotaanpa esimerkkiä suurimman ja pienimmän arvon hakemiseksi ja poistamiseksi.
Tiedoston nimi: TreeSet3.java
lateksi tekstin koko
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()); } }
Lähtö:
Lowest Value: 12 Highest Value: 66
Java TreeSet -esimerkki 4:
Tässä esimerkissä suoritamme erilaisia NavigableSet-toimintoja.
Tiedoston nimi: TreeSet4.java
puhdista npm-välimuisti
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)); } }
Lähtö:
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 -esimerkki 5:
Tässä esimerkissä suoritamme erilaisia SortedSetSet-toimintoja.
Tiedoston nimi: 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')); } }
Lähtö:
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E]
Java TreeSet Esimerkki: Kirja
Katsotaanpa TreeSet-esimerkkiä, jossa lisäämme kirjoja sarjaan ja tulostamme kaikki kirjat. TreeSet-elementtien on oltava tyyppiä Comparable. String- ja Wrapper-luokat ovat oletuksena vertailukelpoisia. Jos haluat lisätä käyttäjän määrittämiä objekteja TreeSet-ohjelmaan, sinun on otettava käyttöön vertailukelpoinen käyttöliittymä.
Tiedoston nimi: 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-poikkeus TreeSetissä
Jos lisäämme luokan objektin, joka ei toteuta Comparable-liitäntää, ClassCast-poikkeus nousee esiin. Huomioi seuraava ohjelma.
sarja postgresissa
Tiedoston nimi: 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.'); } }
Kun käännämme yllä olevan ohjelman, saamme ClassCastExceptionin, kuten alla on esitetty.
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)
Selitys: Yllä olevassa ohjelmassa vaaditaan vertailukelpoisen käyttöliittymän toteuttaminen. Se johtuu siitä, että TreeSet ylläpitää lajittelujärjestystä, ja lajittelun suorittamiseksi TreeSetissä lisättävien eri objektien vertailu on välttämätöntä, mikä saadaan aikaan käyttämällä Comparable-liitäntää.