STEP1:見通しつけ

public class HashTable{

 //テスト用関数
 public static void main(String args[]){
   HashFunction[] functions = new HashFunction[]{new FooHashFunction(),new BarHashFunction()...};
   //FooHashFunction implements HashFunctionなどは君が作ってくだせえ
   int seed =/*擬似乱数が毎回同じ値を出すように、適当な数字を与えてくだせえ*/;

   for(int i = 0 ; i < functions.length;i++){
    java.util.Random rand = new java.util.Random(seed);
    HashTable table = new HashTable(function[i]);
    //ここでrand.nextInt()を1000回put

    //1000回putしたテーブルの内部状態をレポートとして出力
    System.out.println(table.toString());
   }  
 }
 private java.util.List[] chains = new java.util.ArrayList[/*適当なチェイン数*/];
 private HashFunction function;
 public HashTable(HashFunction function){this.function = function;}
 public void put(int index,int value){/*値挿入*/}
 public String toString(){/*状態ダンプ*/}
}

public interface HashFunction{public int hashCode(int value);}

ココから先は、自分でやってくれないかなあ…と淡い期待。ねむいし。