/**
*
*/
package ecologylab.collections;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Zachary O. Toups (zach@ecologylab.net)
*
*/
public class OverlappingAnyKeySets<K extends Object, O extends Object> extends
OverlappingSets<O>
{
Map<K, Long> keyToNumberMapping;
/**
*
*/
public OverlappingAnyKeySets(K[] keys)
{
super();
keyToNumberMapping = new HashMap<K, Long>();
long i = 0;
for (K key : keys)
{
keyToNumberMapping.put(key, ((long) Math.pow(2, i)));
i++;
}
}
/**
* @param playerNames
*/
public OverlappingAnyKeySets(List<K> keys)
{
super();
keyToNumberMapping = new HashMap<K, Long>();
long i = 0;
for (K key : keys)
{
keyToNumberMapping.put(key, ((long) Math.pow(2, i)));
i++;
}
}
public void put(K key, O value)
{
super.put(keyToNumberMapping.get(key), value);
}
public void put(K[] keys, O value)
{
super.put(computeNumericalKey(keys), value);
}
/**
* @param keys
* @return
*/
private long computeNumericalKey(K[] keys)
{
long numKey = 0;
for (K key : keys)
{
numKey = numKey | keyToNumberMapping.get(key);
}
return numKey;
}
public void put(Collection<K> keys, O value)
{
long numKey = 0;
for (K key : keys)
{
numKey = numKey | keyToNumberMapping.get(key);
}
super.put(numKey, value);
}
public List<O> getSet(K... keys)
{
return super.getSet(computeNumericalKey(keys));
}
public static void main(String[] args)
{
String[] keys =
{ "andruid", "bill", "zach", "ross" };
OverlappingAnyKeySets<String, String> t = new OverlappingAnyKeySets<String, String>(
keys);
t.put("andruid", "a");
t.put(keys, "vowels");
String[] t1 = {"zach", "ross"};
String[] t2 = {"zach", "ross", "andruid"};
t.put(t1, "two");
t.put(t2, "three");
t.put(t1, "2");
t.put(t1, "2two");
System.out.println(t.toString());
}
}