测试类

package cn.edut.hash.test;

import java.lang.reflect.Method;

import org.junit.Test;

import cn.edut.hash.SeparateChainingHashTable;

public class SeparateChainingHashTabletEST {
	@Test
	public void test() throws Exception {
		SeparateChainingHashTable<Integer> hashTable  = new SeparateChainingHashTable<>(103) ; 
		Method method = hashTable.getClass().getDeclaredMethod("isPrime", long.class);
		method.setAccessible(true);
		Object result = method.invoke(hashTable, 103);
		System.out.println(result);
		
		System.out.println(long.class);
		System.out.println(Long.class);
		Object[]  cc = {(long)103};
		System.out.println(cc[0].getClass());
		
		System.out.println("------");
		result = false ;
		//result = TestMethod(hashTable ,"isPrime", 130) ;
		//实例方法的返回值 = TestMethod(实例, 实例方法名, 实例方法参数类型, 实例方法参数值);
		result = TestMethod(hashTable, "isPrime" , new Class[]{long.class} , new Object[] {103}) ; 
		System.out.println(result);
	}
	
	/** * 有bug: * 1. 调用方法的方法参数不能是基本类型 */
	private <T> Object TestMethod(T instance ,String methodName, Object... args) throws Exception {
		Class<?>[] cs = new Class[args.length];  
		for(int i=0 ; i<cs.length ; i++) {
			cs[i] = args[i].getClass() ; 
		}
		return  TestMethod(instance,methodName,cs , args);
	}
	/** * 处理了上述bug */
	private <T> Object TestMethod(T instance ,String methodName, Class<?>[] paraClasses , Object[] paraValues ) throws Exception {
		Method method = instance.getClass().getDeclaredMethod(methodName,paraClasses);
		method.setAccessible(true);
		Object result = method.invoke(instance, paraValues);
		return result ;
	}
}

目标类

package cn.edut.hash;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class SeparateChainingHashTable<T> {
	/** * 构造 使用默认大小 */
	public SeparateChainingHashTable() {
		this(DEFAULT_TABLE_SIZE);
	}

	/** * 构造 设定大小, * * @param size */
	@SuppressWarnings("unchecked")
	public SeparateChainingHashTable(int size) {
		keyList = new ArrayList[size];
	}

	/** * 添加 元素 * * @param e */
	public void insert(T e) {
		// TODO Auto-generated method stub
	}

	/** * 删除 元素 * * @param e */
	public void remove(T e) {
		// TODO Auto-generated method stub
	}

	/** * 判断是否包含元素 * * @return */
	public boolean contains() {
		// TODO Auto-generated method stub
		return false;
	}

	/** * 清空散列 */
	public void makeEmpty() {
		// TODO Auto-generated method stub
	}

	/** * 需要是一个素数 */
	private static final int DEFAULT_TABLE_SIZE = 101;
	/** * list里面放链表,根据hashcode判断放在哪个链表里面 */
	private List<T>[] keyList;
	/** * 存量多少个数据 */
	private int currentSize;

	/** * 扩容 */
	private void rehash() {
		// TODO Auto-generated method stub
	}

	/** * 计算元素hashcode * * @return */
	private int myhash(T e) {
		return e.hashCode() % keyList.length;
	}

	/** * 生产下一个素数 是否要静态? */
	private long nextPrime(long n) {
		while(isPrime(++n)) {}
		return n;
	}
	/** * 判断素数 是否要静态? */
	private boolean isPrime(long n) {
		if (n < 2) {
			return false;
		} else if (n > 2) {
			if(n%2==0) {
				return false ;
			}else {
				long len = (long) Math.sqrt(n);
				for(long i=3 ; i < len ;i++) {
					if(n%i==0) {
						return false; 
					}
				}
			}
		}	
		return true;
	}

}