可以通过使用数组来手写 HashMap 的实现。每个数组项可以包含一个键值对。当想要添加一个键值对时,可以使用哈希函数将键转换为数组索引,并将值存储在该索引处。当想要检索与特定键关联的值时,可以使用哈希函数计算键的数组索引,并检索该索引处的值。
下面是一个示例实现:
class HashMap {
private static class Entry {
private final Object key;
private Object value;
private Entry next;
public Entry(Object key, Object value, Entry next) {
this.key = key;
this.value = value;
this.next = next;
}
}
private Entry[] table;
public HashMap(int capacity) {
table = new Entry[capacity];
}
public void put(Object key, Object value) {
int index = key.hashCode() % table.length;
Entry entry = new Entry(key, value, null);
if (table[index] == null) {
table[index] = entry;
} else {
Entry current = table[index];
while (current.next != null) {
if (current.key.equals(key)) {
current.value = value;
return;
}
current = current.next;
}
current.next = entry;
}
}
public Object get(Object key) {
int index = key.hashCode() % table.length;
Entry current = table[index];
while (current != null) {
if (current.key.equals(key)) {
return current.value;
}
current = current.next;
}
return null;
}
}