Java 具有非唯一键的已排序映射
需要时使用什么结构Java 具有非唯一键的已排序映射,java,collections,Java,Collections,需要时使用什么结构 按键对元素排序 持有非唯一密钥的能力 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",
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->"..."]
Structure struct=新结构;
结构添加(3,“…”);
结构添加(1,“约翰”);
结构添加(2,“埃德温”);
结构添加(1,“玛丽”);
struct.toString()=={key->value;}[1->“John”,1->“Mary”,2->“Edwin”,3->“…]
如果您想使用标准JavaAPI,我会选择一个
TreeMap
- 元素按键排序,因为它是一个
。从文档中: 映射按照其键的自然顺序排序,或者由通常在已排序映射创建时提供的比较器进行排序。迭代排序映射的集合视图(由entrySet、keySet和values方法返回)时,会反映此顺序SortedMap
- 该结构允许非唯一键,因为您可以将一个键映射到多个对象
根据您的需要,您还可以有一个
SortedSet
,其中元素在成对的左侧元素上进行排序。(请注意,您应该自己编写Pair类,但它不应该超过几行。)听起来您可能需要一个映射
,以便每个键映射到一个字符串列表(或其他集合)
ApacheCommons有一个函数,它可以实现上述功能,而无需编写代码
MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);
coll将是一个包含“a”、“B”、“C”的集合
我猜想Google Collections也会提供类似的功能。除了使用Apache Commons或Guava的多地图实现,或者按照其他答案的建议实现一个
对
类之外,您只需使用树地图即可。它不再是一个键映射到单个字符串
,而是映射到一个列表
,该列表可以保存多个值,因此可以像多重映射一样有效地工作
但我还是要为生产代码提供一个合适的多重映射