O'Reilly logo

Jakarta Commons Cookbook by Timothy M. O'Brien

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

5.6. Using a Bag

Problem

You need to find out how many times an object occurs within a Collection, and you need a Collection that lets you manipulate the cardinality of objects it contains.

Solution

Use a Bag. A Bag can store the same object multiple times while keeping track of how many copies it contains. For example, a Bag object can contain 20 copies of object “A” and 50 copies of object “B,” and it can be queried to see how many copies of an object it contains. You can also add or remove multiple copies of an object—add 10 copies of “A” or remove 4 copies of “B.” The following example creates a Bag and adds multiple copies of two String objects:

import org.apache.commons.collections.Bag;
import org.apache.commons.collections.bag.HashBag;

Bag bag = new HashBag( );

bag.add( "TEST1", 100 );
bag.add( "TEST2", 500 );

int test1Count = bag.getCount( "TEST1" );
int test2Count = bag.getCount( "TEST2" );

System.out.println( "Counts: TEST1: " + test1Count + ", TEST2: " + test2Count );

bag.remove( "TEST1", 1 );
bag.remove( "TEST2", 10 );

int test1Count = bag.getCount( "TEST1" );
int test2Count = bag.getCount( "TEST2" );

System.out.println( "Counts: TEST1: " + test1Count + ", TEST2: " + test2Count );

This example put 100 copies of the String “TEST1” and 500 copies of the String “TEST2” into a HashBag. The contents of the Bag are then printed, and 1 instance of “TEST1” and 10 instances of “TEST2” are removed from the Bag:

Counts: TEST1: 100, TEST2: 500
Counts: TEST1: 99, TEST2: 490

Discussion ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required