treeset java tutorial with programming examples
Aquest tutorial explica tot sobre TreeSet Class, Implementació, Iteració, TreeSet Vs HashSet, Exemples de Java TreeSet, etc.:
TreeSet a Java implementa la interfície Set (més específicament SortedSet). TreeSet utilitza un TreeMap internament per emmagatzemar dades. Per defecte, els objectes o elements del TreeSet s’emmagatzemen segons l’ordre natural en ordre ascendent.
La classe TreeSet que implementa TreeSet a Java implementa la interfície ‘NavigableSet’ i també hereta la classe AbstractSet.
=> Consulteu aquí per veure aquí A-Z de tutorials de formació.
Què aprendreu:
TreeSet a Java
Tingueu en compte que els elements TreeSet també es poden ordenar explícitament proporcionant el comparador personalitzat en el moment de crear un objecte TreeSet mitjançant el prototip de constructor específic.
A continuació es detallen algunes de les característiques importants de TreeSet:
- La classe TreeSet implementa la interfície SortedSet. No permet duplicar elements.
- La classe TreeSet no està sincronitzada.
- TreeSet no conserva l'ordre d'inserció, però els elements de TreeSet s'ordenen segons l'ordenació natural.
- TreeSet es pot ordenar mitjançant un comparador personalitzat mentre es crea un objecte TreeSet.
- TreeSet s'utilitza normalment per emmagatzemar grans quantitats d'informació que s'ordena de forma natural. Això facilita l'accés fàcil i ràpid.
Declaració de classe TreeSet
Java proporciona una classe anomenada 'TreeSet' que conté la funcionalitat de l'estructura de dades TreeSet. La classe TreeSet forma part del paquet java.util.
Per incloure la classe TreeSet al programa Java, hauríem d'utilitzar la declaració d'importació tal com s'indica a continuació:
import java.util.TreeSet;
o bé
import java.util.*;
Una declaració general de la classe TreeSet és:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Com es veu a la declaració de classe, la classe TreeSet amplia AbstractSet i implementa interfícies NavigableSet, Cloneable i Serializable.
A continuació es proporciona una jerarquia de classes per a la classe TreeSet:
Implementació interna
Sabem que TreeSet implementa la interfície NavigableSet i amplia la classe SortedSet.
Internament, el constructor TreeSet es defineix de la manera següent:
public TreeSet() { this(new TreeMap()); }
Com es veu a la definició anterior del constructor de TreeSet, s’invoca un objecte TreeMap. Així, internament, és un objecte TreeMap que s’implementa per a un TreeSet. Per tant, mentre s’afegeix un element a TreeSet, s’afegeix una clau a TreeMap en què les claus s’ordenen per defecte.
Segons Documentació d'Oracle a TreeSet ,
'Un TreeSet és una implementació NavigableSet basada en un TreeMap.'
Exemple de Java TreeSet
El següent programa Java mostra un exemple senzill que demostra TreeSet. En aquest programa, hem definit un simple conjunt d’arbres de color. Hi afegim elements i després el mostrem. Tingueu en compte que els elements es mostren segons l’ordenació natural.
import java.util.*; class Main{ public static void main(String args[]){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Sortida:
Contingut del conjunt d’arbres:
Blau Verd Vermell Groc
Iterar a través de TreeSet
Per accedir als elements individuals de TreeSet, hem d’iterar a través de TreeSet o, dit d’una altra manera, a través de TreeSet.
Ho fem declarant un iterador per a TreeSet i després fem servir aquest iterador per accedir a cada element. Per a això, fem servir el mètode next () d’un iterador que retorna l’element següent del TreeSet.
El següent programa Java demostra l'ús de l'iterador per iterar a través de TreeSet.
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String[] args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
Sortida:
Conjunt d'arbres: [5, 10, 15, 20, 25]
TreeSet mitjançant Iterator: 5, 10, 15, 20, 25,
quins són el nom d'usuari i la contrasenya del meu router
Comparador d'arbres a Java
Per defecte, el TreeSet s’ordena naturalment. També podem ordenar TreeSet en un ordre personalitzat definint una nova classe de comparació. En aquesta classe de comparador, hem d’anul·lar el mètode ‘compare’ per ordenar els elements del TreeSet. Aquest objecte de comparació es passa al constructor TreeSet.
El següent programa Java mostra l’ús d’un comparador per ordenar el TreeSet.
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String[] args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
Sortida:
Conjunt d'arbres: [Pune, Indore, Hyderabad, Bangaluru]
El programa anterior implementa una classe Comparator per ordenar el TreeSet donat alfabèticament en ordre invers.
Lectura recomanada = >> Interfície de comparació de Java
API TreeSet / Mètodes i constructors
En aquesta secció, parlarem de l'API de la classe TreeSet. Aquí analitzarem els constructors i els mètodes proporcionats per la classe TreeSet.
La classe TreeSet proporciona constructors sobrecarregats per construir un objecte TreeSet.
Hem tabulat aquests constructors de la següent manera:
Constructors
Prototip de constructor | Descripció | |
---|---|---|
conté | booleà conté (Objecte o) | Comprova si TreeSet conté un element donat; cert si està present. |
TreeSet () | Constructor per defecte per crear un nou objecte TreeSet buit. | |
TreeSet (col·lecció c) | Crea un nou objecte TreeSet que conté els elements de la col·lecció donada c, ordenats segons l’ordenació natural. | |
Conjunt d'arbres (Comparador comparador) | Construeix un nou objecte TreeSet que està buit i que s'ordenarà segons el comparador especificat. | |
TreeSet (SortedSet) | Crea un nou objecte TreeSet que conté elements de sortedSet donats. |
Mètodes
A continuació, tabulem els diversos mètodes proporcionats per la classe TreeSet.
Mètode | Mètode prototip | Descripció |
---|---|---|
afegir | addició booleana (E e) | Afegeix un element donat a TreeSet si encara no hi és. |
addAll | addAll booleà (col·lecció c) | Afegeix tots els elements de la col·lecció donada c al conjunt. |
sostre | Sostre E (E e) | Retorna un element major o igual a e (mínim element); o nul si no hi ha cap element. |
clar | void clear () | Suprimeix tots els elements del TreeSet. |
clonar | Clon d'objectes () | Retorna una còpia superficial de l'objecte TreeSet. |
comparador | Comparador comparador () | Retorna el comparador de TreeSet o nul si s'utilitza un ordre natural. |
descendingIterator | Iterador descendent Iterador () | Retorna l'iterador descendent sobre els elements del TreeSet. |
descendingSet | NavigableSet descendingSet () | Retorna una vista d'elements del TreeSet en ordre invers. |
primer | E primer () | Retorna el primer o el més baix element del TreeSet. |
pis | Planta E (E e) | Retorna l'element inferior o igual a l'element donat e al TreeSet. Retorna nul si no hi ha aquest element. |
headSet | SortedSet headSet (E toElement) | retorna un conjunt d'elements que són estrictament inferiors a la donada a Element |
NavigableSet headSet (E toElement, booleà inclòs) | Retorna un conjunt d'elements que són iguals (si s'inclouen = cert) o són inferiors als indicats a Element. | |
més alt | E superior (E e) | Retorna el mínim element d'aquest conjunt estrictament superior a l'element donat, o nul si no hi ha cap element. |
està buit | boolean isEmpty () | Comprova si el TreeSet està buit. Retorna cert si està buit. |
iterador | Iterador iterador () | Retorna un iterador (en ordre ascendent) per a TreeSet. |
últim | E last () | Retorna l'element més alt o l'últim del TreeSet. |
més baix | E inferior (E e) | Retorna l'element (element més gran) que és estrictament inferior a l'element donat e del TreeSet. |
pollFirst | E pollFirst () | Elimina i retorna el primer element (més baix) del conjunt; nul si el conjunt està buit. |
pollLast | E pollLast () | Elimina i retorna l'últim element (més gran) del conjunt; nul si es defineix buit. |
eliminar | eliminar booleà (objecte o) | Elimina l’element donat del conjunt. |
mida | int size () | Retorna la mida o el nombre d'elements presents al TreeSet. |
subconjunt | Subconjunt NavigableSet (E fromElement, booleà fromInclusive, E toElement, boolean toInclusive) | Retorna una vista d'elements que van des d'Element a Element. |
Subconjunt SortedSet (E fromElement, E toElement) | Retorna una visualització d'elements que van des d'Element (inclòs) fins a Element (exclusiu). | |
tailSet | SortedSet tailSet (E fromElement) | Retorna una vista que conté elements que són majors o iguals a la donada fromElement. |
NavigableSet tailSet (E fromElement, booleà inclòs) | Retorna una visualització dels elements iguals (si és inclòs és cert) o superiors a fromElement. |
TreeSet a Java 8
Tingueu en compte que per TreeSet no hi ha canvis importants a la versió de Java 8. Tots els mètodes i constructors funcionen en Java 8 i les versions posteriors.
Implementació de TreeSet a Java
El següent programa Java implementa la majoria dels mètodes TreeSet comentats anteriorment.
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String[] args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
Sortida:
Contingut del conjunt d’arbres: 10 15 25 30 35
sostre (25): 25
planta (25): 25
TreeSet conté (15): true
Mida del conjunt d’arbres: 5
TreeSet Primer element: 10
TreeSet Darrer element: 35
L'element 30 s'ha eliminat de TreeSet
TreeSet després d'eliminar (): 10 15 25 35
Mida de l'arbre després d'eliminar (): 4
Auriculars: [10, 15, 25]
Mida del conjunt d’arbres després d’esborrar (): 0
Al programa anterior, definim un objecte TreeSet i després hi afegim elements mitjançant el mètode ‘add’. A continuació, definim una ArrayList. A continuació, afegim elements d’ArrayList a TreeSet mitjançant el mètode ‘addAll’. Més endavant, demostrem diversos mètodes TreeSet com Iterator, sostre, terra, primer, darrer, conté, mida, és buit, etc.
TreeSet Vs HashSet
Vegem algunes de les diferències entre TreeSet i HashSet.
Conjunt d'arbres | HashSet |
---|---|
Els elements s’ordenen segons l’ordenació natural. | Els elements no estan ordenats. |
Es necessita O (registre N) per a operacions com inserir, suprimir i cercar, de manera que és més lent que TreeSet. | Es necessita temps constant per a operacions bàsiques com ara inserir, suprimir i cercar, de manera que és més ràpid que TreeSet. |
No permet objectes nuls. | Permet l'objecte nul. |
Utilitza el mètode compareTo () per comparar dos objectes. | Utilitza el mètode compare () i equals () per comparar dos objectes. |
Implementat internament mitjançant Navigable TreeMap. | Implementat internament mitjançant HashMap. |
Té una rica API de funcionalitat que pot realitzar diverses manipulacions. | La funcionalitat API de HashSet és bastant limitada. |
Preguntes freqüents
P # 1) Què és un TreeSet?
Resposta: TreeSet és una implementació de SortedSet que no permet duplicar valors. Els elements del TreeSet s’ordenen per defecte en ordre ascendent.
Q # 2) Com s'afegeixen elements a TreeSet a Java?
Resposta: La classe TreeSet proporciona un mètode add que s’utilitza per afegir un element específic a TreeSet. També proporciona el mètode 'addAll'. Aquest mètode accepta qualsevol altra col·lecció com a argument i després afegeix tots els elements d'aquesta col·lecció a TreeSet.
Q # 3) TreeSet és segur per a fils?
Resposta: No. TreeSet no és apte per a fils. Per tant, hem de tenir cura de com operem TreeSet en un entorn multi-threaded.
Q # 4) TreeSet pot tenir duplicats?
Resposta: No. TreeSet no permet duplicats.
Q # 5)TreeSet permet null a Java?
Resposta: Sí. Podem tenir elements nuls a TreeSet.
Conclusió
Això completa el nostre tutorial sobre TreeSet. TreeSet és una implementació SortedSet que no permet duplicats però permet valors nuls. Els elements del TreeSet s’ordenen per defecte segons l’ordre natural en ordre ascendent.
Hem vist els conceptes bàsics de la classe TreeSet juntament amb la seva declaració i diversos constructors i mètodes.
En els nostres tutorials posteriors, analitzem la resta de classes de col·lecció Java.
=> Mireu aquí les sèries de formació Java senzilles.
Lectura recomanada
- Arbre de cerca binària a Java: implementació i exemples de codi
- TreeMap a Java: tutorial amb exemples de Java TreeMap
- Què és Java Vector | Tutorial de Java Vector Class amb exemples
- Tutorial de classe Java Scanner amb exemples
- Tutorial de classe Java Array: classe java.util.Arrays amb exemples
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java
- Java String conté () Tutorial de mètode amb exemples
- Matriu irregular a Java: tutorial amb exemples