HashMap 与多值映射

Soa*_*ion 6 java rest jersey

我最近在 Java 中使用了 Rest API 并遇到了 MultivaluedMap。我没有发现MultivaluedMapHashMap 或其他类(如TreeMap或 )的优势 LinkedHashMap。请解释需要 MultivaluedMap 时的场景。

Dav*_*INO 13

一个MultivaluedMap是:

键值对映射。每个键可以有零个或多个值

一个Map是:

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

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

在 a 中,Map您可以准确地插入 1 个与键相关的对象。

这就是区别,如果您需要存储与单个 key 相关的许多值它会很有用,如果您只有一个值,它们是相似的。


一个可能的场景是一个字典,您可以在其中保存以字母开头的所有相关单词。键是 AB C... Z,值是单词。

A -> Acid
     Apple 
     August

B -> Banana
     Boat

C -> Car
     Chain

...

Z -> Zebra
Run Code Online (Sandbox Code Playgroud)

这可以编码为:

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");
Run Code Online (Sandbox Code Playgroud)

另一种情况是一个包含用户购买的所有产品的 Map。键是用户 ID,值是产品。

USER1 -> Pizza Margherita
         Pizza Pepperoni

USER2 -> Pizza Margherita

USER3 -> Pizza Margherita
         Pizza Pepperoni
         Pizza Four Cheese
Run Code Online (Sandbox Code Playgroud)

  • 请通过放置多个值来提供示例..感谢您的回答真的很有帮助 (2认同)
  • @SoaFusion 查询参数和表单参数可以具有不同值的重复键。例如`http://foo.com?id=1&amp;id=2&amp;id=3`。您需要在此处使用“MultivaluedMap”来将键“id”与值列表 1、2、3 一起放置。 (2认同)