The behavior of Map
and HashMap
you describe is the intended behavior, as other commenters note. What you want is a multimap. You can roll your own (don't do this-- other commenters suggest maps to lists, but that quickly becomes cumbersome. If you really want to roll your own, roll your own generic multimap with list/set values and hide the complexity.) or use Guava's multimap. Example:
import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;
public static void main(String[] args)
{
final SetMultimap<Integer, Integer> foo = HashMultimap.create();
foo.put( 1,35);
foo.put( 1,30);
foo.put( 1,20);
foo.put( 2,10);
foo.put( 3,40);
foo.put( 3,25);
foo.put( 3,15);
System.out.println(foo);
}
Output:
{1=[35, 20, 30], 2=[10], 3=[25, 40,
15]}
If you want to access the values, there are a couple of ways depending on what you want to do. Just calling get(Integer key)
will return a collection of the values.
Also, check out this answer, which cites lots of related goodness in Guava.