HashMap与MultivaluedMap的区别

11

我最近对Java中的Rest API很感兴趣,了解到了MultivaluedMap。但我并不清楚MultivaluedMap相比于HashMap、TreeMap或LinkedHashMap等类的优势在哪里。请解释一下什么情况下需要使用MultivaluedMap。

1个回答

17

MultivaluedMap是:

一组键值对的映射表。每个键可以有零个或多个值

Map是:

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

因此,在MultivaluedMap中,您可以插入0、1、2、3或更多与同一键相关的对象。

Map中,您只能插入与键相关的一个对象。

这就是它们之间的区别,如果您需要存储与单个键相关的多个值,则它可能很有用,如果只有一个值,则它们类似。


一个可能的场景是,您保存以字母开头的所有相关单词的字典。 键是A B C…Z,而值是单词。

A -> Acid
     Apple 
     August

B -> Banana
     Boat

C -> Car
     Chain

...

Z -> Zebra

可以使用以下代码编写:

MultivaluedMap<String, String> multiMap = new MultivaluedHashMap<>();
multiMap.add("A", "Acid");
multiMap.add("A", "Apple");
multiMap.add("A", "August");
multiMap.add("B", "Banana");
multiMap.add("B", "Boat");
multiMap.add("C", "Car");
multiMap.add("C", "Chain");
multiMap.add("Z", "Zebra");

另一种情况是一个Map,它保存了用户购买的所有产品。键是用户ID,值是产品。

USER1 -> Pizza Margherita
         Pizza Pepperoni

USER2 -> Pizza Margherita

USER3 -> Pizza Margherita
         Pizza Pepperoni
         Pizza Four Cheese

2
请提供一个示例,通过放置多个值来说明。谢谢你的回答,非常有帮助。 - Soa Fusion
2
@SoaFusion查询参数和表单参数可以具有不同值的重复键。例如http://foo.com?id=1&id=2&id=3。您需要一个MultivaluedMap来将键id与值列表1、2、3放在一起。 - Paul Samsotha
1
@PaulSamsotha 非常感谢您提供的真实世界示例。 - Soa Fusion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接