package cs224n.util;
import java.util.*;
import java.io.Serializable;
/**
* The MapFactory is a mechanism for specifying what kind of map is to be used
* by some object. For example, if you want a Counter which is backed by an
* IdentityHashMap instead of the defaul HashMap, you can pass in an
* IdentityHashMapFactory.
*
* @author Dan Klein
*/
public abstract class MapFactory<K,V> implements Serializable {
public static class HashMapFactory<K,V> extends MapFactory<K,V> {
static final long serialVersionUID = 1L;
public Map<K,V> buildMap() {
return new HashMap<K,V>();
}
}
public static class IdentityHashMapFactory<K,V> extends MapFactory<K,V> {
static final long serialVersionUID = 1L;
public Map<K,V> buildMap() {
return new IdentityHashMap<K,V>();
}
}
public static class TreeMapFactory<K,V> extends MapFactory<K,V> {
static final long serialVersionUID = 1L;
public Map<K,V> buildMap() {
return new TreeMap<K,V>();
}
}
public static class WeakHashMapFactory<K,V> extends MapFactory<K,V> {
static final long serialVersionUID = 1L;
public Map<K,V> buildMap() {
return new WeakHashMap<K,V>();
}
}
public abstract Map<K,V> buildMap();
}