Interfaz multiset | guayaba | Java

Introducción: Multiset es una colección que admite la igualdad independiente del orden , como Set, pero puede tener elementos duplicados. Podríamos pensar entonces que un Multiset es una Lista, pero no es así.

  • Las listas pueden contener duplicados del mismo objeto y las listas siempre están ordenadas.
  • Los conjuntos no pueden contener duplicados y la interfaz de conjunto no garantiza el orden.

Entonces, un Multiset ocupa una especie de área gris entre una Lista y un Conjunto. Se permiten duplicados, pero no hay orden garantizado. Un conjunto múltiple también se denomina a veces bolsa . En los multiconjuntos, como en los conjuntos ya diferencia de las tuplas, el orden de los elementos es irrelevante en los multiconjuntos. Por ejemplo: los multiconjuntos {a, a, b} y {a, b, a} son iguales.

Hay dos formas principales de ver Multiset:

  • Esto es como un ArrayList< E > sin una restricción de orden, es decir, el orden no importa.
  • Esto es como un Map< E, Integer > , con elementos y conteos.

Puntos importantes :

  • Multiset es una colección que admite la igualdad independiente del orden, como Set, pero puede tener elementos duplicados.
  • Los elementos de un conjunto múltiple que son iguales entre sí se denominan ocurrencias del mismo elemento único .
  • El número total de ocurrencias de un elemento en un conjunto múltiple se denomina recuento de ese elemento.
  • Dado que el recuento de un elemento se representa como un int, un conjunto múltiple nunca puede contener más de Integer.MAX_VALUE ocurrencias de cualquier elemento.
  • Un conjunto múltiple usa Object.equals(java.lang.Object) para determinar si dos instancias deben considerarse «iguales», a menos que la implementación especifique lo contrario.
  • Un Multiset< E > tiene elementos con recuentos positivos únicamente. Ningún elemento puede tener recuentos negativos y se considera que los valores con recuento 0 no están en el conjunto múltiple. No aparecen en la vista elementSet() o entrySet().
  • multiset.size() devuelve el tamaño de la colección, que es igual a la suma de los recuentos de todos los elementos. Para el número de elementos distintos, utilice elementSet().size(). Por ejemplo, add(E) aumenta multiset.size() en uno.
  • multiset.iterator() itera sobre cada aparición de cada elemento, por lo que la longitud de la iteración es igual a multiset.size().
  • Multiset admite la adición de elementos, la eliminación de elementos o la configuración del recuento de elementos directamente. setCount(elemento, 0) es equivalente a eliminar todas las apariciones del elemento.
  • multiset.count(element) para un elemento que no está en el multiset siempre devuelve 0.

Declaración: la declaración de la interfaz com.google.common.collect.Multiset es la siguiente:

@GwtCompatible
public interface Multiset
   extends Collection

Ejemplo: sabemos que si se agregan dos elementos iguales a java.util.Set, el segundo elemento se descartará.

// Java implementation to show if 2
// equal elements are added to
// java.util.Set, then the 2nd element
// will be discarded
  
import java.util.Set;
import java.util.HashSet;
  
// Set of Strings
Set<String> set = new HashSet();
  
// Adding elements to the set
set.add("Geeks");
set.add("Geeks");
  
System.out.println(set);
  
// The output will be [Geeks]

Pero, si usamos Guava’s Multiset, entonces el elemento duplicado no será descartado. Vea el siguiente código para la implementación:

// Java implementation to show if 2
// equal elements are added to
// Multiset, then the 2nd element
// will not be discarded
  
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
  
// Multiset of String
Multiset<String> multiset = HashMultiset.create();
  
// Adding elements to the set
multiset.add("Geeks");
multiset.add("Geeks");
  
System.out.println(multiset);
  
// The output will be [Geeks X 2]

A continuación se presentan algunos otros métodos proporcionados por Multiset Interface of Guava:

Implementaciones:
Guava proporciona muchas implementaciones de Multiset, que corresponden aproximadamente a las implementaciones de mapas JDK.

Ejemplo para conjunto:

// Java code to show implementation
// of a Set
import java.util.*;
  
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
  
class GuavaTester {
  
    // Driver code
    public static void main(String args[])
    {
  
        // Creating a Set of Strings
        Set<String> set = new HashSet();
  
        // Adding elements to set
        set.add("Geeks");
        set.add("for");
        set.add("Geeks");
        set.add("for");
        set.add("GeeksforGeeks");
        set.add("Geeks");
        set.add("GeeksforGeeks");
        set.add("Geeks");
  
        // printing the total size of the set
        System.out.println("Total Size is : " + set.size());
  
        // print the occurrence of each element
        System.out.println("Occurrences of Geeks are : " + Collections.frequency(set, "Geeks"));
  
        System.out.println("Occurrences of for are : " + Collections.frequency(set, "for"));
  
        System.out.println("Occurrences of GeeksforGeeks are : " + Collections.frequency(set, "GeeksforGeeks"));
    }
}

Producción :

Total Size is : 3
Occurrences of Geeks are : 1
Occurrences of for are : 1
Occurrences of GeeksforGeeks are : 1

Ejemplo para multiconjunto:

// Java code to show implementation
// of a Multiset
import java.util.*;
  
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
  
class GuavaTester {
  
    // Driver code
    public static void main(String args[])
    {
  
        // Creating a Multiset of Strings
        Multiset<String> multiset = HashMultiset.create();
  
        // Adding elements to multiset
        multiset.add("Geeks");
        multiset.add("for");
        multiset.add("Geeks");
        multiset.add("for");
        multiset.add("GeeksforGeeks");
        multiset.add("Geeks");
        multiset.add("GeeksforGeeks");
        multiset.add("Geeks");
  
        // printing the total size of the multiset
        System.out.println("Total Size is : " + multiset.size());
  
        // print the occurrence of each element
        System.out.println("Occurrences of Geeks are : " + multiset.count("Geeks"));
  
        System.out.println("Occurrences of for are : " + multiset.count("for"));
  
        System.out.println("Occurrences of GeeksforGeeks are : " + multiset.count("GeeksforGeeks"));
    }
}

Producción :

Total Size is : 8
Occurrences of Geeks are : 4
Occurrences of for are : 2
Occurrences of GeeksforGeeks are : 2

Referencia: Google Guayaba

Publicación traducida automáticamente

Artículo escrito por Sahil_Bansall y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *