class MyHashMap {
private Node[] hasArray;
/** Initialize your data structure here. */
public MyHashMap() {
hasArray = new Node[5000];
}
private int hash(int key) {
return (key % hasArray.length) & (hasArray.length - 1);
}
/** value will always be non-negative. */
public void put(int key, int value) {
int i = hash(key);
if (hasArray[i] == null) {
hasArray[i] = new Node(key,value);
}else {
Node node = hasArray[i];
if (node.key == key) {
node.value = value;
}else {
Node temp = node;
while (temp.next !=null){
temp = temp.next;
if (temp.key == key) {
temp.value = value;
return;
}
}
Node next = new Node(key,value);
temp.next = next;
next.pre = temp;
}
}
}
/** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
public int get(int key) {
Node node = hasArray[hash(key)];
while (node != null){
if (node.key == key) {
return node.value;
}
node = node.next;
}
return -1;
}
/** Removes the mapping of the specified value key if this map contains a mapping for the key */
public void remove(int key) {
Node node = hasArray[hash(key)];
while (node != null){
if (node.key == key) {
if (node.pre != null) {
node.pre.next = node.next;
if (node.next != null) {
node.next.pre = node.pre;
}
}else {
hasArray[hash(key)] = node.next;
if (node.next != null) {
node.next.pre = null;
}
}
return;
}
node = node.next;
}
}
public class Node{
public Node next;
public Node pre;
public int value;
public int key;
public Node(int key,int value){
this.key = key;
this.value = value;
}
}
}