Templates by BIGtheme NET

Google Guava Collections – MultiSets

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