La classe Java TreeSet implémente l'interface Set qui utilise une arborescence pour le stockage. Il hérite de la classe AbstractSet et implémente l'interface NavigableSet. Les objets de la classe TreeSet sont stockés par ordre croissant.
Les points importants concernant la classe Java TreeSet sont :
- La classe Java TreeSet contient des éléments uniques uniquement comme HashSet.
- Les temps d’accès et de récupération aux classes Java TreeSet sont très rapides.
- La classe Java TreeSet n'autorise pas les éléments nuls.
- La classe Java TreeSet n'est pas synchronisée.
- La classe Java TreeSet maintient l'ordre croissant.
- La classe Java TreeSet contient des éléments uniques uniquement comme HashSet.
- Les temps d’accès et de récupération aux classes Java TreeSet sont assez rapides.
- La classe Java TreeSet n'autorise pas les éléments nuls.
- La classe Java TreeSet n'est pas synchronisée.
- La classe Java TreeSet maintient l'ordre croissant.
- Le TreeSet ne peut autoriser que les types génériques comparables. Par exemple, l'interface Comparable est implémentée par la classe StringBuffer.
Fonctionnement interne de la classe TreeSet
TreeSet est implémenté à l'aide d'un arbre de recherche binaire, qui s'auto-équilibre tout comme un arbre rouge-noir. Par conséquent, les opérations telles que la recherche, la suppression et l’ajout consomment du temps O(log(N)). La raison derrière cela réside dans l’arbre auto-équilibré. Il est là pour garantir que la hauteur de l'arbre ne dépasse jamais O(log(N)) pour toutes les opérations mentionnées. Par conséquent, il s’agit de l’une des structures de données efficaces permettant de conserver les données volumineuses triées et également d’effectuer des opérations sur celles-ci.
Synchronisation de la classe TreeSet
Comme déjà mentionné ci-dessus, la classe TreeSet n'est pas synchronisée. Cela signifie que si plusieurs threads accèdent simultanément à un ensemble d'arborescences et que l'un des threads qui y accèdent le modifie, la synchronisation doit être effectuée manuellement. Cela se fait généralement en effectuant une synchronisation d'objets qui encapsule l'ensemble. Cependant, dans le cas où aucun objet de ce type n'est trouvé, l'ensemble doit être encapsulé à l'aide de la méthode Collections.synchronizedSet(). Il est conseillé d'utiliser la méthode lors de la création afin d'éviter l'accès non synchronisé de l'ensemble. L'extrait de code suivant montre la même chose.
TreeSet treeSet = new TreeSet(); Set syncrSet = Collections.synchronziedSet(treeSet);
Hiérarchie de la classe TreeSet
Comme le montre le diagramme ci-dessus, la classe Java TreeSet implémente l'interface NavigableSet. L'interface NavigableSet étend les interfaces SortedSet, Set, Collection et Iterable par ordre hiérarchique.
document.queryselector
Déclaration de classe TreeSet
Voyons la déclaration de la classe java.util.TreeSet.
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Constructeurs de la classe Java TreeSet
Constructeur | Description |
---|---|
EnsembleArbre() | Il est utilisé pour construire un ensemble d'arbres vide qui sera trié par ordre croissant selon l'ordre naturel de l'ensemble d'arbres. |
TreeSet(Collection c) | Il est utilisé pour construire un nouvel arbre contenant les éléments de la collection c. |
TreeSet (Comparateur comparateur) | Il est utilisé pour construire un ensemble d'arbres vide qui sera trié selon un comparateur donné. |
TreeSet (SortedSet s) | Il est utilisé pour construire un TreeSet qui contient les éléments du SortedSet donné. |
Méthodes de la classe Java TreeSet
Méthode | Description |
---|---|
booléen ajouter(E e) | Il permet d'ajouter l'élément spécifié à cet ensemble s'il n'est pas déjà présent. |
booléen addAll (Collection c) | Il est utilisé pour ajouter tous les éléments de la collection spécifiée à cet ensemble. |
E plafond(E e) | Il renvoie l'élément le plus grand égal ou le plus proche de l'élément spécifié de l'ensemble, ou null s'il n'existe pas d'élément de ce type. |
Comparateur comparateur() | Il renvoie un comparateur qui organise les éléments dans l'ordre. |
Itérateur descendantIterator() | Il est utilisé pour itérer les éléments par ordre décroissant. |
NavigableSet descendantSet() | Il renvoie les éléments dans l'ordre inverse. |
Étage(E e) | Il renvoie le moindre élément égal ou le plus proche de l'élément spécifié de l'ensemble, ou null s'il n'existe pas d'élément de ce type. |
SortedSet headSet (E vers élément) | Il renvoie le groupe d'éléments inférieurs à l'élément spécifié. |
NavigableSet headSet (E toElement, booléen inclus) | Il renvoie le groupe d'éléments inférieurs ou égaux (si inclus est vrai) à l'élément spécifié. |
E supérieur(E e) | Il renvoie le plus grand élément le plus proche de l'élément spécifié de l'ensemble, ou null s'il n'existe pas d'élément de ce type. |
Itérateur itérateur() | Il est utilisé pour itérer les éléments par ordre croissant. |
E inférieur(E e) | Il renvoie le plus petit élément le plus proche de l'élément spécifié de l'ensemble, ou null s'il n'existe pas d'élément de ce type. |
E sondagePremier() | Il est utilisé pour récupérer et supprimer l’élément le plus bas (premier). |
E sondageDernier() | Il est utilisé pour récupérer et supprimer l’élément le plus élevé (dernier). |
Spliterator spliterator() | Il est utilisé pour créer un séparateur à liaison tardive et à échec rapide sur les éléments. |
Sous-ensemble NavigableSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Il renvoie un ensemble d'éléments situés entre la plage donnée. |
Sous-ensemble SortedSet (E fromElement, E toElement)) | Il renvoie un ensemble d'éléments situés entre la plage donnée qui inclut fromElement et exclut toElement. |
SortedSet tailSet (E fromElement) | Il renvoie un ensemble d'éléments supérieurs ou égaux à l'élément spécifié. |
NavigableSet tailSet (E fromElement, booléen inclus) | Il renvoie un ensemble d'éléments supérieurs ou égaux (si inclusif est vrai) à l'élément spécifié. |
booléen contient (Objet o) | Il renvoie vrai si cet ensemble contient l'élément spécifié. |
booléen isEmpty() | Il renvoie vrai si cet ensemble ne contient aucun élément. |
booléen supprimer (Objet o) | Il est utilisé pour supprimer l'élément spécifié de cet ensemble s'il est présent. |
vide clair() | Il permet de supprimer tous les éléments de cet ensemble. |
Clone d'objet() | Il renvoie une copie superficielle de cette instance TreeSet. |
E d'abord() | Il renvoie le premier élément (le plus bas) actuellement dans cet ensemble trié. |
E dernier() | Il renvoie le dernier élément (le plus élevé) actuellement dans cet ensemble trié. |
taille int() | Il renvoie le nombre d'éléments dans cet ensemble. |
Exemples de jeux d'arbres Java
Exemple 1 de jeu d'arbres Java :
Voyons un exemple simple de Java TreeSet.
Nom de fichier: TreeSet1.java
boucle for dans un script shell
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()); } } }Testez-le maintenant
Sortir:
Ajay Ravi Vijay
Exemple 2 de TreeSet Java :
Voyons un exemple de parcours d'éléments par ordre décroissant.
Nom de fichier: 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()); } } }Testez-le maintenant
Sortir:
Traversing element through Iterator in descending order Vijay Ravi Ajay Traversing element through NavigableSet in descending order Vijay Ravi Ajay
Exemple de jeu d'arbres Java 3 :
Voyons un exemple pour récupérer et supprimer la valeur la plus élevée et la plus basse.
Nom de fichier: TreeSet3.java
qu'est-ce que la gestion des exceptions en 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()); } }
Sortir:
Lowest Value: 12 Highest Value: 66
Exemple de jeu d'arbres Java 4 :
Dans cet exemple, nous effectuons diverses opérations NavigableSet.
Nom de fichier: TreeSet4.java
j'essaie d'entrer
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)); } }
Sortir:
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]
Exemple de TreeSet Java 5 :
Dans cet exemple, nous effectuons diverses opérations SortedSetSet.
Nom de fichier: 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')); } }
Sortir:
Intial Set: [A, B, C, D, E] Head Set: [A, B] SubSet: [A, B, C, D] TailSet: [C, D, E]
Exemple Java TreeSet : livre
Voyons un exemple de TreeSet dans lequel nous ajoutons des livres à l'ensemble et imprimons tous les livres. Les éléments de TreeSet doivent être de type Comparable. Les classes String et Wrapper sont comparables par défaut. Pour ajouter des objets définis par l'utilisateur dans TreeSet, vous devez implémenter l'interface Comparable.
Nom de fichier: 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){>
Exception ClassCast dans TreeSet
Si nous ajoutons un objet de la classe qui n'implémente pas l'interface Comparable, l'exception ClassCast est levée. Observez le programme suivant.
Nom de fichier: ClassCastExceptionTreeSet.java
comparer en chaîne
// 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.'); } }
Lorsque nous compilons le programme ci-dessus, nous obtenons l'exception ClassCastException, comme indiqué ci-dessous.
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)
Explication: Dans le programme ci-dessus, il est nécessaire d'implémenter une interface comparable. En effet, le TreeSet maintient l'ordre de tri et, pour effectuer le tri, il est nécessaire de comparer les différents objets insérés dans le TreeSet, ce qui est réalisé en implémentant l'interface Comparable.