1. 概述
在这个教程中,我们将学习Java中Map
和MultivaluedMap
的区别。在此之前,让我们先看一些示例。
2. Map
示例
HashMap
实现了Map
接口,并允许null
值和null
键:
@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
接口,同样允许null
值和null
键:
@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!");
}
上述单元测试也成功通过。这里,每个键可以映射到一个包含零个或多个元素的值列表。
5. 区别在哪里?
在Java生态系统中,Map
和MultivaluedMap
都是接口。主要区别在于,在Map
中,每个键都精确地映射到一个对象。而在MultivaluedMap
中,同一个键可以关联零个或多个对象。
此外,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上找到。