Java TreeMap还不够好

时间:2015-03-10 22:14:09

标签: java sortedmap

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

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

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

  

1丹尼尔   3露西亚
  4 Pinto

我希望它打印出来:

  

1丹尼尔   3莫妮卡
  3露西亚
  4 Pinto

我应该使用哪种数据类型?

2 个答案:

答案 0 :(得分:2)

地图中的键是唯一的,因此您只能将一个值与每个键相关联。这就是为什么你的键“3”在输出中只出现一次。

根据您的要求,似乎有两种解决方案:

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

      

    1,[丹尼尔]
       3,[莫妮卡,露西亚]
       4,[平托]

  •   
  因此与你要求的完全不符,但更有可能是你想要的。

答案 1 :(得分:1)

使用MultiMap - 一个包含每个键的值集合的映射。

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

coll将是一个包含&#34; A&#34;,&#34; B&#34;,&#34; C&#34;。

的集合