需要时使用什么结构
保持非唯一键的能力
Structure<Integer, String> struct = new Structure<Integer, String>;
struct.add(3,"...");
struct.add(1,"John");
struct.add(2,"Edwin");
struct.add(1,"Mary");
struct.toString() == {key-> value;} [1->"John",1->"Mary",2->"Edwin",3->"..."]
Run Code Online (Sandbox Code Playgroud)aio*_*obe 12
如果你想使用标准的Java API,我会选择一个TreeMap<Integer, Set<String>>.
元素按键排序,因为它是a SortedMap.来自文档:
地图是根据其键的自然顺序排序的,或者是通常在排序的地图创建时提供的比较器.迭代有序映射的集合视图(由entrySet,keySet和values方法返回)时会反映此顺序.
该结构允许使用非唯一键,因为您可以让一个键映射到多个对象.
这种类型的结构称为有序多图,并且有几个实现在第一次插入时隐藏了创建初始集的细节等.例如,看看Guava或Apache Commons.
根据您的需要,您还可以使用a SortedSet<Pair<Integer, String>>,其中元素在对中的左侧元素上排序.(请注意,您可以自己编写Pair类,但它不应超过几行.)
听起来你可能需要一个,Map<Integer, List<String>>所以每个键映射到一个列表(或其他集合)的字符串.
Apache Commons有一个MultiMap,可以完成上述操作,无需编写代码.
MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);
Run Code Online (Sandbox Code Playgroud)
coll将是一个包含"A","B","C"的集合.
我怀疑,Google Collections会提供类似的东西.