Java TreeMap 不够好

Java TreeMap not good enough

我想要一个可以整理的Map<Integer, String>。我曾尝试使用 TreeMap<Integer, String> 但它每个元素只存储一个键,我想有多个相同的键元素。
例如,当我添加:

map.put(1, "Daniel");
map.put(3, "Monica");
map.put(4, "Pinto");
map.put(3, "Lucia");

然后打印所有元素,其中 TreeMap 显示为:

1 Daniel
3 Lucia
4 Pinto

我希望它打印:

1 Daniel
3 Monica
3 Lucia
4 Pinto

为此我应该使用什么数据类型?

使用 MultiMap - 一个映射,其中包含针对每个键的值集合。

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".

的集合

映射中的键是唯一的,因此每个键只能关联一个值。这就是为什么您的密钥“3”在输出中只出现一次的原因。

似乎有两种解决方案,具体取决于您的要求:

  • 使用 SortedSet,使用 IntegerString 的元素组合以及自定义 Comparator。这样,“3 Monica”和“3 Lucia”将形成您的 collection 中完全独立的元素。它会匹配您的输出,因为 collection 中的每个元素都将是您问题中显示的输出中的一行,但感觉有点笨拙,很可能不是您想要的。
  • 在地图中使用 collection class 作为您的值,例如一个 List<String>,所以你会有一个 Map<Integer,List<String>>。然后,您不能使用 put 方法添加到该列表,但您需要创建自己的方法来延迟检索或创建 List,并附加新元素。 collection 看起来像这样:

    1, [Daniel]
    3, [Monica, Lucia]
    4, [Pinto]

and thus would not match exactly what you asked for but is more likely what you want.