package org.glassfish.pfl.basic.contain ;
import java.util.Map ;
import java.util.HashMap ;
public class MultiSet<E> {
private Map<E,Integer> contents = new HashMap<E,Integer>() ;
public void add( E element ) {
Integer value = contents.get( element ) ;
if (value == null) {
value = 0 ;
}
value += 1 ;
contents.put( element, value ) ;
}
public void remove( E element ) {
Integer value = contents.get( element ) ;
if (value == null) {
return ;
}
value -= 1 ;
if (value == 0) {
contents.remove( element ) ;
} else {
contents.put( element, value ) ;
}
}
public boolean contains( E element ) {
Integer value = contents.get( element ) ;
if (value == null) {
value = 0 ;
}
return value > 0 ;
}
public int size() {
return contents.keySet().size() ;
}
private static void shouldBeTrue( boolean val, String msg ) {
if (!val)
System.out.println( msg ) ;
}
private static void shouldBeFalse( boolean val, String msg ) {
if (val)
System.out.println( msg ) ;
}
public static void main( String[] args ) {
MultiSet<String> mset = new MultiSet<String>() ;
String s1 = "first" ;
String s2 = "second" ;
mset.add( s1 ) ;
shouldBeTrue( mset.contains( s1 ), "mset does not contain s1 (1)" ) ;
mset.add( s2 ) ;
mset.add( s1 ) ;
mset.remove( s1 ) ;
shouldBeTrue( mset.contains( s1 ), "mset does not contain s1 (2)" ) ;
mset.remove( s1 ) ;
shouldBeFalse( mset.contains( s1 ), "mset still contains s1 (3)" ) ;
shouldBeTrue( mset.contains( s2 ), "mset does not contain s2 (4)" ) ;
}
}