Un conjunto es simplemente una colección de objetos únicos. Único significa que dos objetos no pueden tener los mismos valores. Dependiendo de la implementación del conjunto, se puede ordenar o no. El conjunto de Java, como Tipo de datos abstracto (ADT), tiene algunas operaciones clave (donde T representa cualquier tipo de datos, por ejemplo, int, String o cualquier objeto de clase):
boolean add(T item)
: devuelve verdadero si el elemento se agregó correctamente al conjunto y falso si el elemento ya estaba en el conjunto.boolean remove(T item)
: devuelve verdadero si el elemento se eliminó correctamente del conjunto y falso en caso contrario (si el elemento no estaba en el conjunto).boolean contains(T item)
: devuelve verdadero si el elemento está en el conjunto y falso en caso contrario.boolean isEmpty()
: devuelve verdadero si el conjunto está vacío y falso en caso contrario.
contains()
función brinda un excelente tiempo de ejecución para esto: complejidad de tiempo O (1) u O (log n) dependiendo de si la implementación utilizada es a HashSet
o aTreeSet
, respectivamente. Entonces, ¿para qué podría usarse un conjunto? Bueno, si alguna vez necesita realizar un seguimiento de muchos objetos distintos, como ID, nombres u otros identificadores únicos, y verificar con frecuencia si un elemento existe en dicha colección, entonces un conjunto es probablemente una buena opción. Aquí hay un caso de uso de ejemplo de un conjunto: imagine que tiene una lista de Student
objetos que representan a todos los estudiantes en una clase determinada. Cada uno Student
puede tener un nombre único (cadena) y una calificación (int) para esta clase. Si quisiera hacer referencia a una lista de todos los estudiantes A (calificación >=90) con frecuencia, entonces sería tedioso recorrer esta lista y verificar la calificación de cada estudiante cada vez. En su lugar, puede usar una HashSet
de cadenas que realiza un seguimiento de todos los estudiantes A en la clase, como tal:
- Cada vez que se actualizan las calificaciones de los estudiantes, simplemente puede verificar si la nueva calificación del estudiante es mayor o igual a 90 o no.
- Si es así, agréguelos al conjunto de estudiantes A usando
add()
- Si ya era un estudiante A, entonces esta operación simplemente se ignora.
- De lo contrario, elimínelos del conjunto de estudiantes A usando
remove()
- Si no era un estudiante A en este punto, entonces esta operación simplemente se ignora.
- Si es así, agréguelos al conjunto de estudiantes A usando
contains(“Johnny Appleseed”)
al plató. Por supuesto, este es solo un ejemplo de un caso de uso para un conjunto, y este problema específico de realizar un seguimiento de los estudiantes A podría resolverse de otras maneras.
Implementaciones: HashSet en Java y ejemplos de Java TreeSet
TantoHashSet
en Java como TreeSet
en Java vienen en java.utils package
. Puedes importarlos como tales:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
o
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
La diferencia clave entre Java HashSet
y Java TreeSet
es que TreeSet
está ordenado, mientras que HashSet
no lo está. Esta es la razón por la que TreeSet
tiene una complejidad de tiempo O (log n) para operaciones clave, mientras que HashSet
tiene O (1) o una complejidad de tiempo constante; el TreeSet
debe mantener el orden en todo momento. Además de las operaciones de conjunto de claves mencionadas anteriormente, tanto el HashSet
como TreeSet
en Java tienen algunas otras funciones útiles:
void clear()
: borra el conjunto de todos los objetos.int size()
: devuelve el número de objetos en el conjunto.Object clone()
: devuelve una copia superficial del conjunto.Iterator iterator()
: devuelve un iterador al conjunto, comenzando en el primer objeto.
size()
si desea ver cuántos estudiantes 'A' tiene, o clear()
si desea borrar la lista al final del semestre. Puede usar clone()
para crear y mantener un clon de la lista de estudiantes A en un momento específico, como durante los informes parciales (de esta manera, el clon no se mantiene actualizado junto con el original).
Ejemplo de Java HashSet
Aquí hay un breve ejemplo de aHashSet
of String
s que se usa en Java:
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
Producción: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Ejemplo de Java TreeSet
El ejemplo de conjunto de Java podría ayudarlo a comprender la teoría. Aquí está el breve ejemplo de aTreeSet
of String
s que se usa en Java:
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
Producción: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
¡Eso es todo! Espero que esto haya ayudado 😊
GO TO FULL VERSION