一、HashMap
(1)JDK1.7
结构:
在JDK1.7版本中,HashMap的数据结构是由数组+链表组成
初始化:
当我们new 了一个HashMap之后,底层创建了一个默认大小为16的一维数组HashEntry[]table,负载因子默认为0.75.
put():
当执行put方法时,调用key所在类的HashCode()计算哈希值,经过和数组长度取模后得到在HashEntry数组的存放位置。
如果此位置为空,则key-value添加成功
如果此位置有元素,即该位置有一个元素或是多个以链表形式存在的元素,比较key和其他元素的哈希值,
若哈希值和其他元素的不同,则以链表形式添加成功
若哈希值和某个元素key的哈希值相同,则调用key所在类的equals()方法,若equals放回false,则添加成功,若返回true,则用新的value更新原value
get():
首先也是根据 key 计算出 hashcode,然后定位到具体的数组位置
若该位置是为链表,则遍历直到 key 及 hashcode 相等时候就返回值。
不是链表就根据key 及 hashcode是否相等来返回值
啥都没取到就直接返回 null