what java collection that provides multiple values for the same key

You can use a List as the value of your Map:

List<Integer> list = new ArrayList<Integer>();
list.add(301);
list.add(302);
list.add(303);

Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
map.put(300, list);

map.get(300); // [301,302,303]

Alternatively, you can use Multimap from Guava, as suggested by biziclop, which has a much cleaner syntax, and lots of other very useful utility methods:

Multimap<Integer, Integer> map = HashMultimap.create();
map.put(300, 301);
map.put(300, 302);
map.put(300, 303);

Collection<Integer> list = map.get(300); // [301, 302, 303]

You could use Multimap, it is under the Apache license.

See this link. For posterity:

org.apache.commons.collections
Interface MultiMap

All Superinterfaces:
    java.util.Map

All Known Implementing Classes:
    MultiHashMap, MultiValueMap

public interface MultiMap
extends java.util.Map

Defines a map that holds a collection of values against each key.

A MultiMap is a Map with slightly different semantics. Putting a value into the map will add the value to a Collection at that key. Getting a value will return a Collection, holding all the values put to that key.

For example:

 MultiMap mhm = new MultiHashMap();
 mhm.put(key, "A");
 mhm.put(key, "B");
 mhm.put(key, "C");
 Collection coll = (Collection) mhm.get(key);

coll will be a collection containing "A", "B", "C".