手写HashMap
public class MyHashMap<K, V> {
private Node<K,V>[] table;
private int size;
private static final int DEFALT_CAPACITY = 16;
public MyHashMap() {
table = new Node[DEFALT_CAPACITY];
}
public void put(K key, V value) {
int hash = hash(key);
Node<K, V> newNode = new Node<K, V>(null, key, value, hash);
if (null == table[hash]) {
table[hash] = newNode;
}else {
Node<K, V> oldNode = table[hash];
while(oldNode.next != null) {
if (oldNode.key.equals(key)) {
oldNode.value = value;
return;
}
oldNode = oldNode.next;
}
oldNode.next = newNode;
}
size++;
}
public V get(K key) {
int hash = hash(key);
Node<K, V> findNode = table[hash];
while(findNode != null) {
if (findNode.key.equals(key)) {
return findNode.value;
}
findNode = findNode.next;
}
return null;
}
public V remove(K key) {
int hash = hash(key);
Node<K, V> node = table[hash];
Node<K, V> prevNode = null;
while (null != node) {
if (node.key.equals(key)) {
size--;
if (null == prevNode) {
table[hash] = node.next;
return node.value;
}else {
prevNode.next = node.next;
return node.value;
}
}
prevNode = node;
node = node.next;
}
return null;
}
public boolean isEmpty() {
if (size <= 0) {
return true;
}
return false;
}
private int size() {
return size;
}
@Override
public String toString() {
if (isEmpty()) {
return "{}";
}
StringBuilder sb = new StringBuilder("{");
for (int i = 0; i < table.length; i++) {
Node<K, V> tempNode = table[i];
while (null != tempNode) {
sb.append(tempNode.key + "=" + tempNode.value + ", ");
tempNode = tempNode.next;
}
}
sb.replace(sb.length() - 2, sb.length(), "");
sb.append("}");
return sb.toString();
}
private int hash(K key) {
return (null == key) ? 0 : key.hashCode()&(table.length - 1);
}
static private class Node<K, V>{
Node<K, V> next;
K key;
V value;
int hash;
public Node(Node<K, V> next, K key, V value, int hash) {
this.next = next;
this.key = key;
this.value = value;
this.hash = hash;
}
}
public static void main(String[] args) {
MyHashMap<String, String> map = new MyHashMap<>();
for (int i = 0; i < 40; i++) {
map.put(i + "", i + "---");
}
System.out.println(map.get("39"));
System.out.println(map);
}
}