HashMap学习随笔
今天看了一下HashMap的实现,记录一下心得:
?
一、HashMap采用普通数组来保存元素
?
二、HashMap中添加元素的操作步骤
public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e= e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; }- 计算待获取KEY的散列码使用特定的算法重新生成高效的散列码使用与操作计算散列码在数组中的位置如果元素在数组中,并且没有下一个节点(散列码相同的只有一个),则返回数据,时间复杂度为O(1)如果元素在数组中,并且有下一个节点(散列码相同的多于一个),则通过链表一直往下查找,直到匹配为止,时间复杂度为O(m),m为具有相同散列码元素的个数如果元素不在数组中,则返回空