code: package edu.berkeley.nlp.util;
  
  import java.io.Serializable;
  
  /**
   * Just a dummy class. TODO: move common functionality here.
   */
  public abstract class AbstractTMap<T> implements Serializable {
  	protected static final long serialVersionUID = 42;
  
  	public static class Functionality<T> implements Serializable {
  		public T[] createArray(int n) {
  			return (T[]) (new Object[n]);
  		}
  
  		public T intern(T x) {
  			return x;
  		} // Override to get desired behavior, e.g., interning
  	}
  
  	public static class ObjectFunctionality extends Functionality<Object> {
  		@Override
  		public Object[] createArray(int n) {
  			return new Object[n];
  		}
  	}
  
  	public static Functionality defaultFunctionality = new Functionality();
  
  	protected static final int growFactor = 2; // How much extra space (times
  												// size) to give for the
  												// capacity
  	protected static final int defaultExpectedSize = 2;
  	protected static final double loadFactor = 0.75; // For hash table
  
  	protected enum MapType {
  		SORTED_LIST, HASH_TABLE
  	}
  
  	protected MapType mapType;
  	protected boolean locked; // Are the keys locked
  	protected int num;
  	protected T[] keys;
  	protected Functionality<T> keyFunc;
  	protected int numCollisions; // For debugging
  }
  