### Question:
ConcurrentDistinctMultiValueMap { public void put(K key, V value) { this.store.computeIfAbsent(key, k -> new ConcurrentLinkedDistinctQueue<>()).add(value); }  Collection<V> get(K key); void put(K key, V value); void clear(); Collection<V> remove(K key); Collection<Collection<V>> values(); void put(K key, Collection<V> values); Collection<V> computeIfAbsent(K key, Function<? super K, ? extends Collection<V>> mappingFunction); Map<K, Collection<V>> shallowCopy(); int size(); boolean isEmpty(); void removeValue(V value);  }### Answer:
@Test public void testMultiValuePutAddsValues() { testee.put("key", "value"); testee.put("key", singletonList("additional value")); assertThat(testee).containsOnly("key", "value", "additional value"); }
@Test public void testMultiValuePutInitializesValues() { testee.put("key", singletonList("value")); assertThat(testee).containsOnly("key", "value"); }
@Test public void testDistinctValuesAreGuaranteed() { this.testee.put("test", "test1"); this.testee.put("test", "test1"); assertThat(this.testee).containsExactlyOneValueFor("test"); }
@Test public void testDifferentValuesAreAccepted() { this.testee.put("test", "test1"); this.testee.put("test", "test2"); assertThat(this.testee).contains("test", "test1", "test2"); }