【深究系列】实现自己的HashMap

public class MyHashMap {
private Entry[] table;
private int capacity = 16;
private float loadfactor = 0.75f;
private int size;
public MyHashMap() {
table = new Entry[capacity];
}
public void put(Object key, Object value) {
Entry toAdd = new Entry(key, value);
int index = key.hashCode() % table.length;
Entry entry = table[index];
if (entry == null) {
table[index] = toAdd;
size++;
} else {
for (Entry e = entry; e != null; e = e.next) {
if ((e.key.hashCode() == key.hashCode()) && (e.key == key || e.key.equals(key))) {
e.value = value;
break;
} else {
if (e.next == null) {
toAdd.next = table[index];
table[index] = toAdd;
size++;
}
}
}
}
if (size > capacity * loadfactor) {
resize(capacity << 1);
}
}
private void resize(int newCapacity) {
System.out.println("扩容了............");
Entry[] newTable = new Entry[newCapacity];
Entry[] src = table;
for (int i = 0; i < src.length; i++) {
Entry entry = src[i];
if (entry != null) {
Entry e = entry;
do {
Entry nextEntry = e.next;
int index = e.key.hashCode() % newCapacity;
e.next = newTable[index];
newTable[index] = e;
e = nextEntry;
} while (e != null);
}
}
table = newTable;
capacity = newCapacity;
}
public Object get(Object key) {
int index = key.hashCode() % table.length;
Entry entry = table[index];
for (Entry e = entry; e != null; e = e.next) {
if (e.key.equals(key) || e.key == key) {
return e.value;
}
}
return null;
}
public static void main(String[] args) {
MyHashMap extHashMap = new MyHashMap();
extHashMap.put("1号", "00");
extHashMap.put("2号", "00");
extHashMap.put("3号", "00");
extHashMap.put("4号", "00");
extHashMap.put("6号", "6号");
extHashMap.put("7号", "00");
extHashMap.put("14号", "00");
extHashMap.put("22号", "00");
extHashMap.put("26号", "26号");
extHashMap.put("27号", "00");
extHashMap.put("28号", "00");
extHashMap.put("66号", "00");
extHashMap.put("26号", "^^^^^");
extHashMap.print();
System.out.println("============================");
extHashMap.put("30号", "00");
extHashMap.print();
System.out.println(extHashMap.get("26号"));
}
public void print() {
for (int i = 0; i < table.length; i++) {
System.out.print("下标[" + i + "] ");
for (Entry e = table[i]; e != null; e = e.next) {
System.out.print("【key = " + e.key + ",value = " + e.value + "】 ");
}
System.out.println();
}
}
class Entry {
Object key;
Object value;
Entry next;
public Entry(Object key, Object value) {
this.key = key;
this.value = value;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?