CodeGym /Blog Java /Random-ES /El conjunto de Java como interfaz
Autor
Aditi Nawghare
Software Engineer at Siemens

El conjunto de Java como interfaz

Publicado en el grupo Random-ES
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): El conjunto de Java como interfaz - 1
  • 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.
Los conjuntos en Java tienen firmas de funciones bastante autoexplicativas (como deberían). Si agrega dos elementos idénticos a un conjunto, solo el primer elemento agregado estará en el conjunto. Todos los intentos posteriores de agregar el mismo elemento se ignorarán a menos que el elemento se elimine primero. Una de las operaciones de conjunto más utilizadas es verificar si un elemento está dentro de un conjunto determinado. La 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 HashSeto 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 Studentobjetos que representan a todos los estudiantes en una clase determinada. Cada uno Studentpuede 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 HashSetde 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 usandoadd()
      • Si ya era un estudiante A, entonces esta operación simplemente se ignora.
    • De lo contrario, elimínelos del conjunto de estudiantes A usandoremove()
      • Si no era un estudiante A en este punto, entonces esta operación simplemente se ignora.
Con tal sistema, siempre tendría un conjunto actualizado de todos los estudiantes 'A' en su clase. Si quisiera comprobar si a Johnny Appleseed le estaba yendo bien en su clase, podría hacerlo fácilmente llamando 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

Tanto HashSeten Java como TreeSeten 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 HashSety Java TreeSetes que TreeSetestá ordenado, mientras que HashSetno lo está. Esta es la razón por la que TreeSettiene una complejidad de tiempo O (log n) para operaciones clave, mientras que HashSettiene O (1) o una complejidad de tiempo constante; el TreeSetdebe mantener el orden en todo momento. Además de las operaciones de conjunto de claves mencionadas anteriormente, tanto el HashSetcomo TreeSeten 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.
Puede imaginar encontrar usos para estas funciones en el ejemplo de la "lista de estudiantes A": podría llamar 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 a HashSetof Strings 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 a TreeSetof Strings 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 😊
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION