思路
本体要求设计一个哈希映射的类及其中的put get remove方法
首先我们要明白什么是哈希映射:类似于HashMap
基于数组实现,通过一个hash函数来生成对应的索引,当多个数索引一致时,再做冲突处理,这里我们使用链地址法来解决哈希冲突。
这里我们创建一个新的内部类Pair作为链表的元素来存之key,value键值对。然后利用链表的操作,实现添加,查询,删除的操作
代码实现(java)
class MyHashMap {
private class Pair {
private int key;
private int value;
public Pair(int key, int value) {
this.key = key;
this.value = value;
}
public int getKey() {
return this.key;
}
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
}
private static final int BASE = 769;
private LinkedList<Pair>[] data;
public MyHashMap() {
data = new LinkedList[BASE];
for (int i = 0; i < BASE; i++) {
data[i] = new LinkedList<Pair>();
}
}
private static int hash(int key) {
return key % BASE;
}
public void put(int key, int value) {
int h = hash(key);
Iterator<Pair> iterator = data[h].iterator();
while (iterator.hasNext()) {
Pair pair = iterator.next();
if (pair.getKey() == key) {
pair.setValue(value);
return;
}
}
data[h].offerFirst(new Pair(key, value));
}
public int get(int key) {
int h = hash(key);
Iterator<Pair> iterator = data[h].iterator();
while (iterator.hasNext()) {
Pair pair = iterator.next();
if (pair.getKey() == key) {
return pair.getValue();
}
}
return -1;
}
public void remove(int key) {
int h = hash(key);
Iterator<Pair> iterator = data[h].iterator();
while (iterator.hasNext()) {
Pair pair = iterator.next();
if (pair.getKey() == key) {
data[h].remove(pair);
return;
}
}
}
}