Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package com.tectonica.collections;
 
 import java.util.Set;
 
 public class ConcurrentMultimap<K, V>
 {
 	private ConcurrentHashMap<K, Set<V>> map = new ConcurrentHashMap<>();
	public int put(K key, V value)
	{
		return put(keyvaluetrue);
	}
	public int put(K key, V valueboolean autoCreateKey)
	{
		Set<V> valuesSet;
		if (autoCreateKey)
		{
			HashSet<V> emptySet = new HashSet<V>();
			valuesSet = .putIfAbsent(keyemptySet);
			if (valuesSet == null)
				valuesSet = emptySet;
		}
		else
		{
			valuesSet = .get(key);
			if (valuesSet == null)
				return 0;
		}
		synchronized (valuesSet)
		{
			valuesSet.add(value);
		}
		return valuesSet.size();
	}
	public Set<V> get(K key)
	{
		Set<V> valuesSet = .get(key);
		if (valuesSet == null)
			return null;
		synchronized (valuesSet)
		{
			return new HashSet<V>(valuesSet);
		}
	}
	public int remove(K key, V value)
	{
		Set<V> valuesSet = .get(key);
		if (valuesSet == null)
			return 0;
		synchronized (valuesSet)
		{
			valuesSet.remove(value);
			if (valuesSet.isEmpty())
				.remove(key);
			return valuesSet.size();
		}
	}
	public void removeFromAll(V value)
	{
		for (K key : .keySet())
			remove(keyvalue);
	}
	public void clear()
	{
	}
New to GrepCode? Check out our FAQ X