代码
/**
* 数据扩容,计算数据角标
* ((h = key.hashCode()) ^ (h >>> 16))保证数据尽量散列
* (size - 1) 保证数据在下标内
* @param key 数据
* @param size 扩容后长度
* @return
*/
public static int index(Object key,int size){
int h;
return ((h = key.hashCode()) ^ (h >>> 16)) & (size - 1);
}
测试
public static void main(String[] args) {
for (int i = 0; i < 8; i++) {
System.out.println(i + " : "+index(i,4));
}
System.out.println("===============");
for (int i = 0; i < 8; i++) {
System.out.println(i + " : "+index(i,8));
}
}