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 ****