加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
HashBuck.java 1.96 KB
一键复制 编辑 原始数据 按行查看 历史
鹿鸣 提交于 2024-02-15 00:55 . 哈希表 哈希桶
public class HashBuck {
static public class Node {
public int key;
public int val;
public Node next;
public Node(int key, int val) {
this.key = key;
this.val = val;
}
}
public Node[] array = new Node[10];
public int usedSize;
public void push(int key,int val) {
Node node = new Node(key,val);
//1、找到位置
int index = key % array.length;
//2、遍历数组
Node cur = array[index];
while (cur != null) {
if(cur.key == key) {
//更新val
cur.val = val;
return;
}
cur = cur.next;
}
//头插法
node.next = array[index];
array[index] = node;
usedSize++;
if( doLoadFactor() >= 0.75) {
//处理重新哈希
reSize();
}
}
private void reSize() {
Node[] newArray = new Node[array.length*2];
//处理重新哈希
for (int i = 0; i < array.length; i++) {
Node cur = array[i];
while (cur != null) {
int index = cur.key % newArray.length;
//记录下来 之前的cur.next
Node curNext = cur.next;
//进行头插法,插入到新数组
cur.next = newArray[index];
newArray[index] = cur;
cur = curNext;
}
}
//把数据给到原数组 array
array = newArray;
}
private double doLoadFactor() {
return usedSize*1.0 / array.length;
}
public int get(int key) {
//1、找到位置
int index = key % array.length;
//2、遍历数组
Node cur = array[index];
while (cur != null) {
if(cur.key == key) {
return cur.val;
}
cur = cur.next;
}
return -1;
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化