The Map and HashMap behavior that you describe is the intended behavior, as other commentators have noted. What you want is a multimap. You can collapse your own (don't do this - other commentators offer maps for lists, but this quickly becomes cumbersome). If you really want to collapse your own, collapse your own common multimap with list / preset values ββand hide the complexity. ) or use Guava 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 values, there are several ways, depending on what you want to do. Just calling get(Integer key) will return a collection of values.
Also, check out this answer , which references a lot of good in Guava.
source share