Continuing this tour with Guava, MultiSets is a new collection class provided. So we start with
What is a MultiSet?
As it holds multiple instances of same type, then how union, intersection operations will work?
Elements are Ordered or not?
Allows duplicates or not? – Very straightforward answers is Yes
What is a MultiSet?
This is often called a bag.
Well As we might be able to guess it’s a set that can holds multiple Instances of same Object.
As we know, normal Sets can holds only one Instance of same object. It means not allow duplicates.
MultiSetExample.java
import java.util.HashSet; import java.util.Set; import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; public class MultiSetExample { public static void main(String[] args) { // TODO Auto-generated method stub Multiset multiSet = HashMultiset.create(); System.out.println("MultiSet Examplen====================="); Foo foo = new Foo(); multiSet.add(foo); multiSet.add(foo); // Add same Instance of foo second time. System.out.println(multiSet.toString()); System.out.println(multiSet.count(foo)); // 2 System.out.println("nSet Examplen====================="); Set s = new HashSet(); s.add(foo); s.add(foo); System.out.println(s.size()); // 1 System.out.println(s.toString()); } } class Foo{}
Select and “Run As” -> Java Application,
Out Put :
MultiSet Example ===================== [Foo@21dc7b3e x 2] 2 Set Example ===================== 1 [Foo@21dc7b3e]
Then few basics questions come here, how do we get count of particular elements and total instances?
multiSet.count(foo); //Foo Instances count in MultiSet. multiSet.size(); //Total elements count in MultiSet.
MultiSetCountExample.java
import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; public class MultiSetCountExample { public static void main(String[] args) { Multiset multiSet = HashMultiset.create(); Foo foo = new Foo(); multiSet.add(foo); multiSet.add(foo); // Add same Instance of foo second time. Foo secondFooObj = new Foo(); multiSet.add(secondFooObj); System.out.println("Foo Instances count in MultiSet is:n" + multiSet.count(foo)); System.out.println("===================================="); System.out.println("Total elements count in MultiSet is:n" + multiSet.size()); } } class Foo{}
Select Run As -> “Java Application”
Out Put :
Foo Instances count in MultiSet is: 2 ==================================== Total elements count in MultiSet is: 3
We can see some basic operations like set count to Multiset, and how this set value add/delete
instances in multiset.
MultiSetSetCountExample.java
import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; public class MultiSetSetCountExample { public static void main(String[] args) { Multiset multiSet = HashMultiset.create(); Foo foo = new Foo(); multiSet.add(foo); multiSet.add(foo); // Add same Instance of foo second time. System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); multiSet.setCount(foo, 0); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); multiSet.setCount(foo, 1); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); multiSet.setCount(foo, 2); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); multiSet.setCount(foo, 10); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); } } class Foo{}
Out Put :
Foo Instances count in MultiSet is:2 >> total size: 2 Foo Instances count in MultiSet is:0 >> total size: 0 Foo Instances count in MultiSet is:1 >> total size: 1 Foo Instances count in MultiSet is:2 >> total size: 2 Foo Instances count in MultiSet is:10 >> total size: 10
Very interesting, let us see how do delete some instances,
multiSet.setCount(foo, 10); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size()); multiSet.remove(foo, 5); System.out.println("Foo Instances count in MultiSet is:" + multiSet.count(foo) +" >> total size: "+ multiSet.size());
Out Put :
Foo Instances count in MultiSet is:10 >> total size: 10 Foo Instances count in MultiSet is:5 >> total size: 5
So far is good, then what about the Union, Intersection, difference and sum.
MultiSetOperationsExample.java
import com.google.common.collect.HashMultiset; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; public class MultiSetOperationsExample { public static void main(String[] args) { Foo foo1 = new Foo(); Foo foo2 = new Foo(); Multiset multiSet1 = HashMultiset.create(); multiSet1.setCount(foo1, 10); multiSet1.setCount(foo2, 10); Multiset multiSet2 = HashMultiset.create(); multiSet2.setCount(foo1, 20); System.out.println("Multisets.union(multiSet1, multiSet2).size() >> " + Multisets.union(multiSet1, multiSet2).size()); System.out .println("Multisets.intersection(multiSet1, multiSet2).size() >> " + Multisets.intersection(multiSet1, multiSet2).size()); System.out .println("Multisets.difference(multiSet1, multiSet2).size() >> " + Multisets.difference(multiSet1, multiSet2).size()); System.out.println("Multisets.sum(multiSet1, multiSet2).size() >> " + Multisets.sum(multiSet1, multiSet2).size()); } } class Foo {}
Out Put :
Multisets.union(multiSet1, multiSet2).size() >> 30 Multisets.intersection(multiSet1, multiSet2).size() >> 10 Multisets.difference(multiSet1, multiSet2).size() >> 10 Multisets.sum(multiSet1, multiSet2).size() >> 40
*** Venkat – Happy leaning ****