Loading

摘要: hashMap寻址算法 计算对象的hashCode()。 再进行调用 hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。 最后(capacity-1)&hash 得到索引。 为何HashMap的数组长度一定是2的次幂 计算索引时效率更高:如果是2的n次幂可以使 阅读全文
posted @ 2024-05-16 23:33 worshipone 阅读(2) 评论(0) 推荐(0) 编辑
摘要: HashMap扩容原理 在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。 每次扩容的时候,都是扩容之前容量的2倍。 扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。 没有hash 阅读全文
posted @ 2024-05-16 22:56 worshipone 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。 根据键值key计算hash值得到数组索引。 判断table[i]==null,条件成立,直接新建节点添加。 如果table[i]==null,不成立 判断table[i]的首个元素是否和key一样,如果相同直 阅读全文
posted @ 2024-05-16 22:09 worshipone 阅读(2) 评论(0) 推荐(0) 编辑
摘要: HashMap的实现原理 底层使用hash表数据结构,即数组+(链表|红黑树)。 添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。 获取数据通过key的hash计算数组下标获取元素。 HashMap的JDK1.7和JDK1.8有什么区别 JDK1.8之前 阅读全文
posted @ 2024-05-16 21:09 worshipone 阅读(2) 评论(0) 推荐(0) 编辑