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生态中,Map和MultivaluedMap都是接口。不同之处在于,在Map中,每个键都只映射到一个对象。但是,在MultivaluedMap中,我们可以有0个或多个对象与同一个键相关联。
此外,MultivaluedMap是Map的子接口,因此它拥有Map的所有方法和一些自己的方法。一些实现Map的类是HashMap、LinkedHashMap、ConcurrentHashMap、WeakHashMap、EnumMap和TreeMap。此外,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上获得。