public class LinearProbingHashST<Key,Value>{
/**
* 利用两个数组来存储key和value,当发生冲突时,不需要链表来解决,而是往后面的索引中寻找空的位置。
*/
//键值对数量
private int N;
//散列表长度
private int M=16;
private Key[] keys;
private Value[] valuse;
public LinearProbingHashST(){
keys=(Key []) new Object[M];
valuse=(Value[]) new Object[M];
}
//该构造函数为了将resize函数中的cap值输入为新的M。
public LinearProbingHashST(int N){
keys=(Key[]) new Object[N];
valuse=(Value[]) new Object[N];
M=N;
}
//将key值转化为数组索引。
private int hash(Key key){
return (key.hashCode()&0x7fffffff)%M;
}
//为了保证M>>N,利用该方法对数组进行扩容。
private void resize(int cap){
LinearProbingHashST<Key,Value> linearProbingHashST=new LinearProbingHashST<Key,Value>(cap);
for (int i=0;i<M;i++){
if(keys[i]!=null){
linearProbingHashST.put(keys[
第三章--线性探测法散列表
最新推荐文章于 2023-12-07 23:48:13 发布