Java TreeSet-klassen implementerar Set-gränssnittet som använder ett träd för lagring. Den ärver klassen AbstractSet och implementerar NavigableSet-gränssnittet. Objekten i klassen TreeSet lagras i stigande ordning.
De viktiga punkterna om Java TreeSet-klassen är:
- Java TreeSet-klassen innehåller bara unika element som HashSet.
- Java TreeSet-klassåtkomst och hämtningstid är tyst snabbt.
- Java TreeSet-klassen tillåter inte null-element.
- Java TreeSet-klassen är inte synkroniserad.
- Java TreeSet klass upprätthåller stigande ordning.
- Java TreeSet-klassen innehåller bara unika element som HashSet.
- Java TreeSet-klassåtkomst och hämtningstid är ganska snabb.
- Java TreeSet-klassen tillåter inte null-element.
- Java TreeSet-klassen är osynkroniserad.
- Java TreeSet klass upprätthåller stigande ordning.
- TreeSet kan bara tillåta de generiska typer som är jämförbara. Till exempel implementeras det jämförbara gränssnittet av klassen StringBuffer.
Internt arbete i TreeSet Class
TreeSet implementeras med hjälp av ett binärt sökträd, som är självbalanserande precis som ett röd-svart träd. Därför tar operationer som att söka, ta bort och lägga till O(log(N))-tid. Anledningen bakom detta finns i det självbalanserande trädet. Den är till för att säkerställa att trädhöjden aldrig överstiger O(log(N)) för alla nämnda operationer. Därför är det en av de effektiva datastrukturerna för att hålla den stora datan som sorteras och även göra operationer på den.
Synkronisering av The TreeSet Class
Som redan nämnts ovan är TreeSet-klassen inte synkroniserad. Det betyder att om mer än en tråd samtidigt får åtkomst till en träduppsättning, och en av åtkomsttrådarna ändrar den, måste synkroniseringen göras manuellt. Det görs vanligtvis genom att göra någon objektsynkronisering som kapslar in setet. Men i fallet där inget sådant objekt hittas måste uppsättningen lindas med hjälp av metoden Collections.synchronizedSet(). Det rekommenderas att använda metoden under skapandet för att undvika osynkroniserad åtkomst av uppsättningen. Följande kodavsnitt visar samma sak.
TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet);
Hierarki för klassen TreeSet
Som visas i diagrammet ovan implementerar Java TreeSet-klassen NavigableSet-gränssnittet. NavigableSet-gränssnittet utökar gränssnitten SortedSet, Set, Collection och Iterable i hierarkisk ordning.
filtrerande python
TreeSet Class Declaration
Låt oss se deklarationen för klassen java.util.TreeSet.
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Konstruktörer av Java TreeSet Class
Konstruktör | Beskrivning |
---|---|
TreeSet() | Den används för att konstruera en tom träduppsättning som kommer att sorteras i stigande ordning enligt träduppsättningens naturliga ordning. |
Träduppsättning (samling c) | Den används för att bygga en ny träduppsättning som innehåller elementen i samlingen c. |
TreeSet(Comparator comparator) | Den används för att konstruera en tom träduppsättning som kommer att sorteras enligt given komparator. |
TreeSet(SortedSet s) | Den används för att bygga en TreeSet som innehåller elementen i den givna SortedSet. |
Metoder för Java TreeSet Class
Metod | Beskrivning |
---|---|
boolesk add(E e) | Den används för att lägga till det angivna elementet till denna uppsättning om det inte redan finns. |
boolean addAll(Collection c) | Den används för att lägga till alla element i den angivna samlingen till denna uppsättning. |
E tak(E e) | Det returnerar det lika eller närmast största elementet av det angivna elementet från mängden, eller null det finns inget sådant element. |
Comparator comparator() | Den returnerar en komparator som ordnar elementen i ordning. |
Iterator descendingIterator() | Det används för att iterera elementen i fallande ordning. |
NavigableSet descendingSet() | Den returnerar elementen i omvänd ordning. |
E våning(E e) | Den returnerar det lika eller närmast minsta elementet i det angivna elementet från mängden, eller null det finns inget sådant element. |
SortedSet headset(E toElement) | Den returnerar gruppen av element som är mindre än det angivna elementet. |
NavigableSet headset (E toElement, inklusive boolean) | Den returnerar gruppen av element som är mindre än eller lika med (om, inklusive är sant) det angivna elementet. |
E högre(E e) | Den returnerar det närmaste största elementet av det angivna elementet från mängden, eller null det finns inget sådant element. |
Iterator iterator() | Den används för att iterera elementen i stigande ordning. |
E lägre(E e) | Det returnerar det närmaste minsta elementet i det angivna elementet från mängden, eller null, det finns inget sådant element. |
E pollFirst() | Det används för att hämta och ta bort det lägsta (första) elementet. |
E pollLast() | Det används för att hämta och ta bort det högsta (sista) elementet. |
Spliterator spliterator() | Den används för att skapa en sent bindande och felsnabb splitterator över elementen. |
NavigableSet subset(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Den returnerar en uppsättning element som ligger mellan det givna intervallet. |
SortedSet subset(E fromElement, E toElement)) | Den returnerar en uppsättning element som ligger mellan det givna intervallet som inkluderar fromElement och exkluderar toElement. |
SortedSet tailSet(E fromElement) | Den returnerar en uppsättning element som är större än eller lika med det angivna elementet. |
NavigableSet tailSet (E fromElement, boolean inklusive) | Den returnerar en uppsättning element som är större än eller lika med (om inklusive är sant) det angivna elementet. |
booleskt innehåller(Objekt o) | Den returnerar sant om denna uppsättning innehåller det angivna elementet. |
boolean isEmpty() | Den returnerar sant om denna uppsättning inte innehåller några element. |
boolean remove(Object o) | Den används för att ta bort det angivna elementet från denna uppsättning om det finns. |
void clear() | Den används för att ta bort alla element från denna uppsättning. |
Object clone() | Den returnerar en ytlig kopia av denna TreeSet-instans. |
E först() | Den returnerar det första (lägsta) elementet för närvarande i denna sorterade uppsättning. |
E sista() | Den returnerar det sista (högsta) elementet för närvarande i denna sorterade uppsättning. |
int storlek() | Det returnerar antalet element i denna uppsättning. |
Java TreeSet exempel
Java TreeSet Exempel 1:
Låt oss se ett enkelt exempel på Java TreeSet.
Filnamn: 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()); } } }Testa det nu
Produktion:
vad är build-essential ubuntu
Ajay Ravi Vijay
Java TreeSet Exempel 2:
Låt oss se ett exempel på att korsa element i fallande ordning.
Filnamn: 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()); } } }Testa det nu
Produktion:
Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay
Java TreeSet Exempel 3:
Låt oss se ett exempel för att hämta och ta bort det högsta och lägsta värdet.
Filnamn: TreeSet3.java
python sorteringsordbok
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()); } }
Produktion:
Lowest Value: 12 Highest Value: 66
Java TreeSet Exempel 4:
I det här exemplet utför vi olika NavigableSet-operationer.
Filnamn: TreeSet4.java
java heltal till sträng
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)); } }
Produktion:
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 Exempel 5:
I det här exemplet utför vi olika SortedSetSet-operationer.
Filnamn: 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')); } }
Produktion:
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E]
Java TreeSet Exempel: Bok
Låt oss se ett TreeSet-exempel där vi lägger till böcker i setet och skriver ut alla böckerna. Elementen i TreeSet måste vara av en jämförbar typ. String- och Wrapper-klasserna är jämförbara som standard. För att lägga till användardefinierade objekt i TreeSet måste du implementera Comparable-gränssnittet.
Filnamn: TreeSetExample.java
tecken till int i 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-undantag i TreeSet
Om vi lägger till ett objekt av klassen som inte implementerar Comparable-gränssnittet, höjs ClassCast-undantaget. Observera följande program.
Filnamn: 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.'); } }
När vi kompilerar programmet ovan får vi ClassCastException, som visas nedan.
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)
Förklaring: I programmet ovan krävs det att man implementerar ett jämförbart gränssnitt. Det beror på att TreeSet upprätthåller sorteringsordningen, och för att utföra sorteringen är jämförelsen av olika objekt som infogas i TreeSet måste, vilket åstadkoms genom att implementera Comparable-gränssnittet.