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
,使用 Integer
和 String
的元素组合以及自定义 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.
我想要一个可以整理的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
,使用Integer
和String
的元素组合以及自定义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]