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