这里主要是用的jdk1.7的实现方式,数组加链表,头插.
要点:get,put,size.
put一个新节点,修改新节点的next指针指向原节点,再把table[i]修改为新节点.
get一个key,遍历.
public class MyHashMap<K, V> {
private Entry[] table;
private static Integer CAPACITY = 8;
private int size = 0;
public MyHashMap() {
this.table = new Entry[CAPACITY];
}
public int size() {
return size;
}
public V get(K key) {
int hash = key.hashCode();
int i = hash % CAPACITY;
for (Entry<K, V> entry = table[i]; entry != null; entry = entry.next) {
if (key.equals(entry.k)){
return entry.v;
}
}
return null;
}
public V put(K key, V value) {
int hash = key.hashCode();
int i = hash % CAPACITY;
for (Entry<K, V> entry = table[i]; entry != null; entry = entry.next) {
if (entry.k.equals(key)) {
V oldValue = entry.v;
entry.v = value;
return oldValue;
}
}
addEntry(key, value, i);
size++;
return null;
}
private void addEntry(K key, V value, int i) {
Entry<K, V> entry = new Entry<>(key, value, table[i]);
table[i] = entry;
}
class Entry<K, V> {
private K k;
private V v;
private Entry<K, V> next;
public Entry(K k, V v, Entry<K, V> next) {
this.k = k;
this.v = v;
this.next = next;
}
public K getK() {
return k;
}
public V getV() {
return v;
}
public Entry<K, V> getNext() {
return next;
}
}
public static void main(String[] args) {
MyHashMap<String,String> hashMap = new MyHashMap<>();
for (int i = 0; i < 10; i++) {
hashMap.put("key"+i,"value"+i);
}
String s = hashMap.get("key");
System.out.println(s);
}
}