Estructura de datos de conjuntos múltiples en Java

Muhammad Adil 20 junio 2023
  1. Opciones para implementar Multiset en Java
  2. Ejemplo de estructura de datos de conjuntos múltiples en Java
  3. Implementación conveniente de Multiset en Java
Estructura de datos de conjuntos múltiples en Java

Los conjuntos múltiples son estructuras de datos que le permiten almacenar múltiples elementos del mismo valor. En C++, la biblioteca de plantillas estándar (STL) incluye una implementación de conjuntos múltiples que proporciona operaciones convenientes para insertar, eliminar y buscar elementos.

Esta estructura de datos es útil en varias aplicaciones, como cuando necesita contar la frecuencia de los elementos en una colección.

Pero, ¿Java tiene una estructura de datos de conjuntos múltiples como la de C++ STL? La respuesta corta es sí.

Opciones para implementar Multiset en Java

Java proporciona varias opciones para implementar un conjunto múltiple, que incluyen:

  1. Usando un Mapa: Un Mapa es una colección que asigna claves a valores, y una opción para implementar un conjunto múltiple es usar un Mapa donde las claves son los elementos y los valores son sus frecuencias. Para insertar un elemento, puede incrementar su frecuencia y para eliminar un elemento, puede disminuir su frecuencia.
  2. Usar una Lista o un Array: Otra opción es usar una List o un Array para almacenar los elementos y luego usar un bucle para contar la frecuencia de cada elemento. Este enfoque puede ser lento cuando el tamaño de la colección es grande, ya que requiere un tiempo lineal para encontrar la frecuencia de un elemento.
  3. Uso de una biblioteca de terceros: hay disponibles varias bibliotecas de terceros que proporcionan una implementación multiconjunto para Java, como la biblioteca Guava de Google y Apache Commons Collections. Estas bibliotecas brindan una implementación conveniente similar al conjunto múltiple STL de C++ y pueden ser una buena opción si desea evitar escribir su implementación.

Entonces, Java tiene una estructura de datos de conjuntos múltiples como la de C++ STL, pero la implementación no es parte de las bibliotecas principales de Java. En su lugar, debe usar un Mapa, una Lista o una Array, o una biblioteca de terceros para implementar un conjunto múltiple en Java.

Ejemplo de estructura de datos de conjuntos múltiples en Java

Aquí hay un ejemplo simple de una estructura de datos de conjuntos múltiples en Java usando un Map<E, Integer>:

import java.util.HashMap;
import java.util.Map;

public class MapMultiset<E> {
  private Map<E, Integer> map;

  public MapMultiset() {
    map = new HashMap<>();
  }

  public void add(E element) {
    Integer count = map.get(element);
    if (count == null) {
      count = 0;
    }
    map.put(element, count + 1);
  }

  public int count(E element) {
    Integer count = map.get(element);
    return count == null ? 0 : count;
  }

  public void remove(E element) {
    Integer count = map.get(element);
    if (count == null) {
      return;
    }
    if (count == 1) {
      map.remove(element);
    } else {
      map.put(element, count - 1);
    }
  }

  public static void main(String[] args) {
    MapMultiset<String> multiset = new MapMultiset<>();
    multiset.add("apple");
    multiset.add("banana");
    multiset.add("apple");
    multiset.add("orange");

    System.out.println("Frequency of apple: " + multiset.count("apple"));
    System.out.println("Frequency of banana: " + multiset.count("banana"));
    System.out.println("Frequency of orange: " + multiset.count("orange"));

    multiset.remove("apple");
    System.out.println("Frequency of apple after removing one: " + multiset.count("apple"));
  }
}

En este ejemplo, usamos un Map<E, Integer> para implementar un conjunto múltiple: el mapa almacena elementos como claves y sus frecuencias como valores.

Tenemos métodos agregar, contar y eliminar que nos permiten agregar un elemento al conjunto múltiple, encontrar la frecuencia de un elemento y eliminar una ocurrencia de un elemento, respectivamente.

El método add recupera el recuento actual del elemento del mapa, y si es nulo, lo establece en 0. Luego, el método agrega 1 al conteo y almacena el conteo actualizado en el mapa.

El método count recupera el recuento del elemento del mapa y lo devuelve o devuelve 0 si el elemento no está en el mapa.

El método remove recupera el recuento del elemento del mapa, y si es nulo, vuelve inmediatamente. Si el conteo es 1, el método elimina el elemento del mapa.

El método decrementa y almacena el conteo actualizado en el mapa si el conteo es mayor a 1.

Cuando se ejecuta el código, agrega varios elementos al conjunto múltiple, encuentra la frecuencia de cada elemento, elimina una ocurrencia del elemento "apple" e imprime la frecuencia de cada elemento.

Haga clic aquí para comprobar el código.

Implementación conveniente de Multiset en Java

Suponga que está buscando una implementación multiconjunto conveniente y eficiente en Java. Usar una biblioteca de terceros como Guava o Apache Commons Collections es una buena idea.

Estas bibliotecas proporcionan un amplio conjunto de funcionalidades, incluidas varias operaciones para insertar, eliminar y buscar elementos y otros métodos de utilidad.

Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook