可以使用List去构建Map,而题中要求的put,get和remove可以通过List中特有函数完成,首先需要构建一个LinkedList类型的data[],data[]的容量为BASE=769(随机选取一个质数)是一个质数,为防止出现添加元素时出现冲突。而由于map中的一个元素是一个键值对,所以创建一个键值对类Pair
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 key;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
然后通过hash方法
private static int hash(int key) {
return key % BASE;
}
取得每个要添加或删除等方法的key对应的链表位置,然后遍历此链表位置的元素,根据对应方法要求编写对应逻辑
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].offerLast(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;
}
}
}