sclass ObjectIndexByClass { // preserving addition order is nice MultiSetMap index = multiSetMap_innerLinkedHashSet(); void add(O o) { if (o != null) index.put(o.getClass(), o); } void remove(O o) { if (o != null) index.remove(o.getClass(), o); } // never returns null Set get(Class c) { ret (Set) index.get(c); } }