El método add
se utiliza para agregar un elemento al conjunto o colección. Aquí explicaremos cómo funciona visualmente paso a paso:
Supongamos que tenemos un TreeSet vacío y queremos agregar el elemento "C". En este caso, el árbol se vería así:
Ahora, si queremos agregar el elemento "A", se compara con el elemento existente ("C") y se decide que "A" es menor, por lo que se coloca a la izquierda:
Añadimos el elemento "B", que es mayor que "A" pero menor que "C", por lo que se coloca a la derecha de "A" y a la izquierda de "C":
La complejidad temporal de add
en un TreeSet es O(log N), donde N es el número de elementos en el conjunto. Debido a la estructura del árbol de busqueda binaria, las inserciones se realizan eficientemente.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<String> treeSet = new TreeSet<>();
// Agregar elementos usando el método add
treeSet.add("C");
treeSet.add("A");
treeSet.add("B");
// Mostrar el TreeSet
System.out.println("TreeSet: " + treeSet);
}
}
El método add
mantiene la propiedad de orden en el TreeSet, asegurando que los elementos se ubiquen correctamente en el árbol.
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Collection;
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("A");
treeSet.add("B");
treeSet.add("C");
Collection<String> collection = new ArrayList<>();
}
}
collection.add("D");
collection.add("E");
collection.add("F");
addAll
treeSet.addAll(collection);
Antes de ejecutar el método addAll
, el árbol se ve así:
Después de ejecutar el método addAll
, el árbol se ve así:
La complejidad temporal de addAll en un TreeSet depende de la cantidad de elementos en la colección a agregar. Si la colección tiene N elementos, la complejidad sería O(N * log N).
El método addAll permite agregar todos los elementos de una colección al TreeSet, manteniendo la propiedad de orden en el árbol de búsqueda binaria.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
treeSet.add(3);
treeSet.add(6);
}
}
ceiling(E e)
// Obtener el elemento igual o mayor al elemento especificado
Integer ceilingElement = treeSet.ceiling(4);
// Imprimir el elemento obtenido (o null si no hay elemento mayor o igual)
System.out.println("Elemento igual o mayor a 4: " + ceilingElement);
El método ceiling(e)
devuelve el elemento igual o mayor al elemento especificado (e). En este caso, dado que hemos agregado los números 5, 2, 8, 3 y 6, el elemento igual o mayor a 4 es 5.
Resultado esperado:
Elemento igual o mayor a 4: 5
El método ceiling(e)
es útil para encontrar el primer elemento igual o mayor al valor especificado en el conjunto.
import java.io.*;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String args[])
{
// Creating an empty TreeSet
TreeSet<String> tree = new TreeSet<String>();
// Use add() method to add elements into the Set
tree.add("Welcome");
tree.add("To");
tree.add("Geeks");
tree.add("4");
tree.add("Geeks");
tree.add("TreeSet");
// Displaying the TreeSet
System.out.println("TreeSet: " + tree);
}
}
clear()
// Clearing the TreeSet using clear() method
tree.clear();
// Displaying the final tree
System.out.println("After clearing TreeSet: " + tree);
}
se utiliza para eliminar todos los elementos de un TreeSet. El uso del método clear() solo borra todo el elemento del conjunto y no elimina el conjunto.
Resultado esperado:
TreeSet: [4, Geeks, To, TreeSet, Welcome]
After clearing TreeSet: []
Arbol normal sin aplicar el metodo
Arbol depues del metodo clear()
import java.io.*;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String args[]) {
// Creating an empty TreeSet
TreeSet<String> tree = new TreeSet<String>();
// Use add() method to add elements into the Set
tree.add("Welcome");
tree.add("To");
tree.add("Geeks");
tree.add("4");
tree.add("Geeks");
tree.add("TreeSet");
// Displaying the TreeSet
System.out.println("TreeSet: " + tree);
}
}
clone()
// Creating a new cloned set
TreeSet cloned_set = new TreeSet();
// Cloning the set using clone() method
cloned_set = (TreeSet)tree.clone();
}
// Displaying the cloned_set System.out.println("The cloned TreeSet: " + cloned_set);
Se utiliza para devolver una copia superficial del conjunto de árboles mencionado. Simplemente crea una copia del conjunto.
Resultado esperado:
TreeSet: [4, Geeks, To, TreeSet, Welcome]
The cloned TreeSet: [4, Geeks, To, TreeSet, Welcome]
Devuelve clon de la lista ingresada
(img/clone.png)
import java.util.TreeSet;
import java.util.Comparator;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet con comparador personalizado (orden inverso)
TreeSet<String> treeSet = new TreeSet<>(Comparator.reverseOrder());
// Agregar elementos al TreeSet
treeSet.add("C");
treeSet.add("A");
treeSet.add("B");
}
}
comparator
Comparator<String> comparator = treeSet.comparator();
System.out.println("Comparador: " + comparator);
En este ejemplo, el comparador utilizado es Comparator.reverseOrder()
, lo que significa que los elementos se ordenarán en orden inverso al orden natural.
Resultado esperado:
Comparador: java.util.Collections$ReverseComparator@hashcode
comparator
devolverá ese comparadorTreeSet
, el método comparator
devolvera null
, indicando que se está utilizando el orden natural de los elementos.Si el conjunto se creó utilizando el orden natural de los elementos, comparator
devolverá null
.
import java.io.*;
import java.util.TreeSet;
public class TreeSetDemo {
// Importing required classes
import java.io.*;
import java.util.TreeSet;
// Main class
public class GFG {
// Main driver method
public static void main(String args[])
{
// Creating an empty TreeSet of string type
TreeSet<String> tree = new TreeSet<String>();
// Adding elements in TreeSet
// Using add() method to
tree.add("Welcome");
tree.add("To");
tree.add("Geeks");
tree.add("4");
tree.add("Geeks");
tree.add("TreeSet");
// Displaying the TreeSet
System.out.println("TreeSet: " + tree);
}
}
usando el método contains() de la clase TreeSet
// Printing a boolean value
System.out.println(
"Does the Set contains 'TreeSet'? "
+ tree.contains("TreeSet"));
}
}
se utiliza para comprobar si un elemento específico está presente en el TreeSet o no. Así que, básicamente, se utiliza para comprobar si un TreeSet contiene algún elemento en particular.
Resultado esperado:
TreeSet: [4, Geeks, To, TreeSet, Welcome]
Does the Set contains 'TreeSet'? true
Arbol Normal Dspues de aplicar el metodo contains()
import java.util.*;
public class GFG1 {
public static void main(String[] argv) throws Exception
{
try {
// create tree set object
TreeSet<Integer> treeadd = new TreeSet<Integer>();
// populate the TreeSet using add() method
treeadd.add(10);
treeadd.add(20);
treeadd.add(30);
treeadd.add(40);
// Print the TreeSet
System.out.println("TreeSet: " + treeadd);
}
}
// Printing a boolean value
Iterator<Integer>iterator = treeadd.descendingIterator();
}
}
System.out.println("\nValues using DescendingIterator:");
while (iterator.hasNext()) {
System.out.println("Value : " + iterator.next());
}
se utiliza para devolver un iterador sobre los elementos de este conjunto en orden descendente.
Resultado esperado:
TreeSet: [10, 20, 30, 40]
Values using DescendingIterator:
Value : 40
Value : 30
Value : 20
Value : 10
Arbol antes de aplicar el metodo desendinfIterator() Despues de aplicar el metodo desendingIterator()
import java.util.*;
public class GFG1 {
public static void main(String[] argv)
throws Exception
{
try {
// create tree set object
TreeSet<String> treeadd = new TreeSet<String>();
// populate the TreeSet using add() method
treeadd.add("A");
treeadd.add("B");
treeadd.add("C");
treeadd.add("D");
// Print the TreeSet
System.out.println("TreeSet: " + treeadd);
NavigableSet<String>treereverse = treeadd.descendingSet();
// getting iterated view of NavigableSet
Iterator<String> iterator = treereverse.iterator();
System.out.println("\nValues using DescendingSet:");
// printing the integrated value
while (iterator.hasNext()) {
System.out.println("Value : "
+ iterator.next());
}
se utiliza para devolver una vista en orden inverso de los elementos contenidos en este conjunto. El conjunto descendente está respaldado por este conjunto, por lo que los cambios en el conjunto se reflejan en el conjunto descendente y viceversa
Resultado esperado:
TreeSet: [A, B, C, D]
Values using DescendingSet:
Value : D
Value : C
Value : B
Value : A
-Devuelve una vista reversa del conjunto original, ordenada en orden descendente. Es importante destacar que descendingSet no crea un nuevo conjunto, sino que proporciona una vista inversa del conjunto existente. Cualquier cambio en el conjunto original se reflejará en la vista descendente y viceversa.
Arbol antes de aplicar el metodo desendingSet() Despues de aplicar el metodo desendingSet()
import java.util.TreeSet;
public class TreesetExample {
public static void main(String[] args) {
// Crea a un TreeSet
TreeSet<Integer> tree = new TreeSet<Integer>();
// Agrega elementos
tree.add(14);
tree.add(8);
tree.add(200);
tree.add(48);
tree.add(7);
tree.add(124);
}
}
first
// Mostrando el elemento más bajo del Treeset
System.out.println("El primer elemento es: " + tree.first());
El método devuelve el elemento más bajo en el Treeset. Si los elementos son de tipo cadena, se verifican en orden alfabético y si los elementos son de tipo entero, se devuelve el número entero más pequeño, en este caso el 7
Resultado esperado:
El primer elemento es: 7
pollFirst()
, first()
no elimina el elemento del conjunto.El método first()
en un TreeSet proporciona una manera eficiente de acceder al primer elemento del conjunto sin realizar ninguna modificación en la estructura del conjunto, permitiendo operaciones de solo lectura de manera eficiente.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(10);
treeSet.add(5);
treeSet.add(15);
treeSet.add(7);
treeSet.add(12);
}
}
floor?(E e)
// Obtener el elemento igual o menor al elemento especificado
Integer floorElement = treeSet.floor(9);
// Imprimir el elemento obtenido (o null si no hay elemento menor o igual)
System.out.println("Elemento igual o menor a 9: " + floorElement);
El método floor?(E e)
devuelve el elemento igual o menor al elemento especificado (e). En este caso, dado que hemos agregado los números 10, 5, 15, 7 y 12, el elemento igual o menor a 9 es 7.
Resultado esperado:
Elemento igual o menor a 9: 7
El método floor?(e)
es útil para encontrar el primer elemento igual o menor al valor especificado en el conjunto.
Desde la perspectiva de la estructura del árbol subyacente en un TreeSet, el método floor?(e)
busca el nodo más bajo en el árbol que sea igual o menor al valor especificado (e).
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
treeSet.add(3);
treeSet.add(6);
}
}
subSet(fromElement, toElement)
// Obtener un subconjunto desde el elemento de inicio hasta el elemento final (exclusivo)
TreeSet<Integer> subSet = new TreeSet<>(treeSet.subSet(3, 6));
// Imprimir el subconjunto
System.out.println("Subconjunto desde el elemento 3 hasta el elemento 6 (exclusivo): " + subSet);
El método subSet(fromElement, toElement)
devuelve un subconjunto del conjunto original que contiene todos los elementos mayores o iguales al elemento de inicio (fromElement) y estrictamente menores que el elemento final (toElement). En este caso, dado que hemos agregado los números 5, 2, 8, 3 y 6, el subconjunto contendrá los elementos 3 y 5.
Resultado esperado:
Subconjunto desde el elemento 3 hasta el elemento 6 (exclusivo): [3, 5]
Demostración en un árbol de busqueda binaria
El método subSet(fromElement, toElement)
es útil para obtener un subconjunto que abarca desde el elemento de inicio (inclusive) hasta el elemento final (exclusivo).
Al emplear subSet(fromElement, toElement)
, es crucial recordar que el elemento final (toElement) no se incluirá en el subconjunto resultante. Este método es efectivo cuando necesitas una porción específica del conjunto original, delimitada por dos valores
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
treeSet.add(3);
treeSet.add(6);
}
}
tailSet(fromElement)
// Obtener un subconjunto desde el elemento especificado (inclusivo)
TreeSet<Integer> tailSet = new TreeSet<>(treeSet.tailSet(3));
// Imprimir el subconjunto
System.out.println("Subconjunto desde el elemento 3 (inclusivo): " + tailSet);
El método tailSet(fromElement)
devuelve un subconjunto del conjunto original que contiene todos los elementos mayores o iguales al elemento especificado (fromElement). En este caso, dado que hemos agregado los números 5, 2, 8, 3 y 6, el subconjunto contendrá los elementos 3, 5, 6 y 8.
Resultado esperado:
Subconjunto desde el elemento 3 (inclusivo): [3, 5, 6, 8]
Demostración en un árbol de busqueda binaria
El método tailSet(fromElement)
es útil para obtener un subconjunto que contiene todos los elementos mayores o iguales al elemento especificado.
tailSet(fromElement)
, es esencial recordar que el subconjunto devuelto incluirá el elemento especificado (fromElement). Este método es útil cuando necesitas todos los elementos mayores o iguales a un valor particular en el conjunto original.headSet(toElement)
, el subconjunto devuelto es una vista respaldada por el conjunto original. Cualquier cambio en el conjunto original se reflejará en el subconjunto y viceversa. Esta característica permite trabajar eficientemente con porciones específicas del conjunto sin duplicar datos.import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
treeSet.add(3);
treeSet.add(6);
}
}
headSet(toElement)
// Obtener un subconjunto hasta el elemento especificado
TreeSet<Integer> headSet = new TreeSet<>(treeSet.headSet(6));
// Imprimir el subconjunto
System.out.println("Subconjunto hasta el elemento 6: " + headSet);
El método headSet(toElement)
devuelve un subconjunto del conjunto original que contiene todos los elementos estrictamente menores que el elemento especificado (toElement). En este caso, dado que hemos agregado los números 5, 2, 8, 3 y 6, el subconjunto contendrá los elementos 2, 3 Y 5.
Resultado esperado:
Subconjunto hasta el elemento 6 (exclusivo): [2, 3, 5]
Demostración en un árbol de busqueda binaria
El método headSet(toElement) es útil para obtener un subconjunto que contiene todos los elementos estrictamente menores que el elemento especificado.
El subconjunto devuelto es una vista respaldada por el conjunto original, por lo que cualquier cambio en el conjunto original se reflejará en el subconjunto y viceversa.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(10);
treeSet.add(5);
treeSet.add(15);
treeSet.add(7);
treeSet.add(12);
}
}
higher(E e)
// Obtener el primer elemento estrictamente mayor al elemento especificado
Integer higherElement = treeSet.higher(9);
// Imprimir el elemento obtenido
System.out.println("Primer elemento estrictamente mayor a 9: " + higherElement);
El método higher(E e)
devuelve el primer elemento estrictamente mayor al elemento especificado (e). En este caso, dado que hemos agregado los números 10, 5, 15, 7 y 12, el primer elemento estrictamente mayor a 9 es 10.
Resultado esperado:
Primer elemento estrictamente mayor a 9: 10
El método higher(e)
es útil para encontrar el primer elemento estrictamente mayor al valor especificado en el conjunto.
import java.util.*;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String args[])
{
// Creating an empty HashSet
TreeSet<String> tree = new TreeSet<String>();
// Use add() method to add elements into the Set
tree.add("Welcome");
tree.add("To");
tree.add("Geeks");
tree.add("4");
tree.add("Geeks");
tree.add("TreeSet");
// Displaying the TreeSet
System.out.println("TreeSet: " + tree);
// Check for the empty set
System.out.println("Is the set empty? " + tree.isEmpty());
se utiliza para comprobar y verificar si un TreeSet está vacío o no. Devuelve True si el TreeSet está vacío, de lo contrario devuelve False.
Resultado esperado:
TreeSet: [4, Geeks, To, TreeSet, Welcome]
Is the set empty? false
-Método isEmpty en un TreeSet es que proporciona una forma conveniente de verificar si el conjunto está vacío o no. El método devuelve true si el conjunto no contiene elementos y false si tiene al menos un elemento.
La operación isEmpty() simplemente verificará si el TreeSet tiene al menos un elemento, es decir, si la raíz del árbol (el nodo "Welcome") no es null.
import java.util.TreeSet;
import java.util.Iterator;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<String> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add("C");
treeSet.add("A");
treeSet.add("B");
}
}
iterator
Iterator<String> iterator = treeSet.iterator();
// Iterar sobre los elementos e imprimirlos
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
El método iterator
devuelve un iterador que proporciona acceso a los elementos en el TreeSet
. En este caso, al imprimir los elementos, se mostrarán en orden ascendente debido a la naturaleza del árbol de búsqueda binaria.
Resultado esperado:
A
B
C
iterator
proporciona un iterador que permite recorrer los elementos del TreeSet
en orden ascendente.for
mejorado (foreach
) para simplificar el código al iterar sobre el TreeSet
.for (String element : treeSet) {
System.out.println(element);
}
import java.util.TreeSet;
public class TreesetExample {
public static void main(String[] args) {
// Crea a un TreeSet
TreeSet<Integer> tree = new TreeSet<Integer>();
// Agrega elementos
tree.add(14);
tree.add(8);
tree.add(200);
tree.add(48);
tree.add(7);
tree.add(124);
}
}
last
// Obtener el último elemento
Integer lastElement = tree.last();
// Imprimir el último elemento
System.out.println("Último elemento: " + lastElement);
El método last()
devuelve el último elemento del conjunto sin eliminarlo. En este caso, el último elemento será 200.
Resultado esperado:
El último elemento es: 200
El método last()
es útil para obtener el elemento más alto del conjunto sin eliminarlo.
last()
lanzará una excepción NoSuchElementException, por lo que es importante asegurarse de que el conjunto contenga elementos antes de llamar a este método.import java.util.TreeSet;
public class GFG {
public static void main(String args[])
{
TreeSet<Integer> tree = new TreeSet<Integer>();
// Add elements to this TreeSet
tree.add(10);
tree.add(5);
tree.add(8);
tree.add(1);
tree.add(11);
tree.add(3);
System.out.println(tree.lower(15));
se utiliza para devolver el elemento más grande de este conjunto que es estrictamente menor que el elemento dado.
Resultado esperado:
11
-El propósito principal de lower es obtener el elemento más grande en el TreeSet que sea estrictamente menor que el valor proporcionado como argumento.
1.Comienzas en la raíz del árbol. 2.Comparas el elemento buscado con el elemento en el nodo actual. 3.Si son iguales, has encontrado el elemento y la búsqueda se completa. 4.Si el elemento buscado es menor que el elemento en el nodo actual, te mueves al subárbol izquierdo. 5.Si el elemento buscado es mayor que el elemento en el nodo actual, te mueves al subárbol derecho. 6.Se Repiten los pasos 2 y 3 hasta que encuentres el elemento buscado o llegues a un nodo que sea null, indicando que el elemento no está presente en el árbol.
Arbol Normal Despues de aplicar el metodo lower()
-Si no existe ningún elemento de este tipo en esta colección TreeSet, este método devuelve un valor NULL -Solo se necesita un parámetro ele. Es el elemento a partir del cual se determina el mayor valor del conjunto que es estrictamente menor que este valor.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
}
}
pollFirst()
Integer firstElement = treeSet.pollFirst();
// Imprimir el primer elemento (o null si el conjunto estaba vacío)
System.out.println("Primer elemento: " + firstElement);
El método pollFirst devuelve y elimina el primer elemento del conjunto. En este caso, dado que hemos agregado los números 5, 2, y 8, el primer elemento será 2.
Resultado esperado:
Primer elemento: 2
Debido a que el elemento a eliminar con pollFirst
siempre será el primer elemento ordenado, por lo tanto, este elemento se encuentra en la hoja (leaf) del árbol. Al eliminar, no se necesitaria reorganizar todo el árbol, debido a que este elemento se encuentra sin "hijos" por así decirlo.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
}
}
pollLast()
Integer lastElement = treeSet.pollLast();
// Imprimir el último elemento (o null si el conjunto estaba vacío)
System.out.println("Último elemento: " + lastElement);
El método pollLast
devuelve y elimina el último elemento del conjunto. En este caso, dado que hemos agregado los números 5, 2, y 8, el último elemento será 8.
Último elemento: 8
Debido a que el elemento a eliminar con pollLast
siempre será el último elemento ordenado, por lo tanto, este elemento se encuentra en la hoja (leaf) del árbol. Al eliminar, no se necesitaria reorganizar todo el árbol, debido a que este elemento se encuentra sin "hijos" por así decirlo.
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// Crear un TreeSet
TreeSet<Integer> treeSet = new TreeSet<>();
// Agregar elementos al TreeSet
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
}
}
remove
boolean removed = treeSet.remove(2);
// Imprimir si el elemento fue eliminado
System.out.println("¿Se eliminó el elemento? " + removed);
El método remove elimina el elemento específico del conjunto. En este caso, al eliminar el número 2, el árbol se reorganizará adecuadamente.
Resultado esperado:
¿Se eliminó el elemento? true
remove(2)
Antes de la eliminación:
Después de la eliminación:
Si el elemento a eliminar es la raíz, la reorganización del árbol puede afectar a sus subárboles. Por ejemplo, si eliminamos el 5:
Antes de la eliminación
Después de la eliminación
El método remove
elimina el elemento específico del conjunto y reorganiza el árbol de búsqueda binaria en consecuencia.