Java中Map和MultivaluedMap的区别

2023/06/07

1. 概述

在本教程中,我们将了解Java中Map和MultivaluedMap之间的区别。但在此之前,让我们先看一些例子。

2. Map示例

HashMap实现了Map接口,它还允许空值和空键:

@Test
public void givenHashMap_whenEquals_thenTrue() {
    Map<String, Integer> map = new HashMap<>();

    // Putting key-value pairs into our map.
    map.put("first", 1);
    map.put(null, 2);
    map.put("third", null);

    // The assert statements. The last arguments is what's printed if the assertion fails.
    assertNotNull(map, "The HashMap is null!");
    assertEquals(1, map.get("first"), "The key isn't mapped to the right value!");
    assertEquals(2, map.get(null), "HashMap didn't accept null as key!");
    assertEquals(null, map.get("third"), "HashMap didn't accept null value!");
}

以上单元测试成功通过。正如我们所见,每个键都映射到一个值。

3. 如何将MultivaluedMap添加到我们的项目中?

在使用MultivaluedMap接口及其实现类之前,我们需要将其库Jakarta RESTful WS API添加到我们的Maven项目中。为此,我们需要在项目的pom.xml文件添加以下依赖项:

<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>3.1.0</version>
</dependency>

4. MultivaluedMap示例

MultivaluedHashMap实现了MultivaluedMap接口,它允许空值和空键:

@Test
public void givenMultivaluedHashMap_whenEquals_thenTrue() {
    MultivaluedMap<String, Integer> mulmap = new MultivaluedHashMap<>();

    // Mapping keys to values.
    mulmap.addAll("first", 1, 2, 3);
    mulmap.add(null, null);

    // The assert statements. The last argument is what's printed if the assertion fails.
    assertNotNull(mulmap, "The MultivaluedHashMap is null!");
    assertEquals(1, mulmap.getFirst("first"), "The key isn't mapped to the right values!");
    assertEquals(null, mulmap.getFirst(null), "MultivaluedHashMap didn't accept null!");
}

以上单元测试成功通过。在这里,每个键都映射到可以包含0个或多个元素的值列表。

5. 有什么区别?

在Java生态中,MapMultivaluedMap都是接口。不同之处在于,在Map中,每个键都只映射到一个对象。但是,在MultivaluedMap中,我们可以有0个或多个对象与同一个键相关联

此外,MultivaluedMap是Map的子接口,因此它拥有Map的所有方法和一些自己的方法。一些实现Map的类是HashMapLinkedHashMapConcurrentHashMapWeakHashMapEnumMapTreeMap。此外,MultivaluedHashMap是一个同时实现Map和MultivaluedMap的类。

例如,addFirst(K key, V value)是MultivaluedMap的方法之一,它将值添加到所提供键的当前值列表的第一个位置:

MultivaluedMap<String, String> mulmap = new MultivaluedHashMap<>();
mulmap.addFirst("firstKey", "firstValue");

另一方面,getFirst(K key)获取提供的键的第一个值:

String value = mulmap.getFirst("firstKey");

最后,addAll(K key, V… newValues)将多个值添加到提供的键的当前值列表中:

mulmap.addAll("firstKey", "secondValue", "thirdValue");

6. 总结

在本文中,我们看到了Map和MultivaluedMap之间的区别。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章