### Question:
MetadataMap implements MultivaluedMap<K, V> { public void addFirst(K key, V value) { addValue(key, value, false); } MetadataMap();  MetadataMap(int size);  MetadataMap(Map<K, List<V>> store);  MetadataMap(Map<K, List<V>> store, boolean copy);  MetadataMap(boolean readOnly, boolean caseInsensitive);  MetadataMap(Map<K, List<V>> store, boolean readOnly, boolean caseInsensitive);  MetadataMap(Map<K, List<V>> store, boolean copyStore,
                       boolean readOnly, boolean caseInsensitive); void add(K key, V value); V getFirst(K key); void putSingle(K key, V value); void clear(); boolean containsKey(Object key); boolean containsValue(Object value); Set<Entry<K, List<V>>> entrySet(); List<V> get(Object key); boolean isEmpty(); Set<K> keySet(); List<V> put(K key, List<V> value); void putAll(Map<? extends K, ? extends List<V>> map); List<V> remove(Object key); int size(); Collection<List<V>> values(); @Override int hashCode(); @Override boolean equals(Object o); String toString(); @SafeVarargs final void addAll(K key, V... newValues); void addAll(K key, List<V> newValues); void addFirst(K key, V value); boolean equalsIgnoreValueOrder(MultivaluedMap<K, V> map);  }### Answer:
@Test public void testAddFirst() { MetadataMap<String, Object> m = new MetadataMap<>(); m.addFirst("baz", "foo"); List<Object> values = m.get("baz"); assertEquals(1, values.size()); assertEquals("foo", values.get(0)); m.addFirst("baz", "clazz"); values = m.get("baz"); assertEquals(2, values.size()); assertEquals("clazz", values.get(0)); assertEquals("foo", values.get(1)); }