![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
集合
lbq1615
记录成长 记录学习 分享收获 共同进步
展开
-
HashMap源码系列
关于源码系列为了提高自己的代码水平和调试水平 逼着自己看了主要集合框架的源码 这里主要是HashMap当然整个过程也是辛苦的 我们都知道集合的本质是数据结构 博主为了看懂它真的是下足了功夫java 算法第四版 二叉树 平衡二叉树 红黑树 这部分的相关内容至少啃了3篇 才鼓足勇气去看HashMap的源码[想哭]那看完后 你怎么知道自己真的看懂了 怎么去验证呢?我的方法是测试特...原创 2020-02-09 23:07:17 · 99 阅读 · 0 评论 -
深入理解HashMap之tree化
treeifBin方法 //treeifyBin的整个流程 //1. 如果tab为空 或者 n小于64 则再散列 为什么呢? //通常随机存入数的情况下 //一个桶满了 那么其他桶也很有可能满了 所以需要扩容 //当tab的length小于64时只需扩容 再散列即可 //2.否者 将链表转换为双向链表 并为每个节点生成相应的TreeNode ...原创 2020-02-09 22:19:15 · 206 阅读 · 0 评论 -
深入理解HashMap之putVal方法
putVal //putVal的整个流程 //1. 如果tab为null 则分配初始容量 调用resize方法 //2. 如果桶中没有任何元素则直接创建节点 //3. 否则桶中发生hash冲突 或者说要更新新的值 //4. 怎么判断要更新值呢 // hash值相等 并且 键和待查入的键相等 或者说equals方法的返回值为TRUE ...原创 2020-02-09 22:09:30 · 554 阅读 · 0 评论 -
HashMap源码之构造函数
构造函数从构造函数开始说起public HashMap(int initialCapacity, float loadFactor) { //如果指定的初始容量小于0 if (initialCapacity < 0) //非法参数异常 throw new IllegalArgumentException("I...原创 2020-02-09 21:00:53 · 109 阅读 · 0 评论 -
HashMap源码之resize方法
resize函数因为HashMap的构造函数 并不会给内部的表开辟空间而是在调用put函数时 如果表为空 调用resize方法换句话说 resize函数不得不 考虑 任何不同形式的构造函数 及带一参 带两参 不带参的构造函数 调用resize方法并且 当表中的数量 超过临界值时 也会调用resize方法所以整个 大概思路旧表保存下来定义并赋值 旧表的长度 临界值 如果旧表为空...原创 2020-02-09 20:59:09 · 374 阅读 · 0 评论 -
二叉查找树
二叉查找树能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号实现在二叉树中,每个节点只能有一个父节点(只有一个例外,也就是根节点,它没有父节点),每个节点到只有左右两个链接分别指向自己的左子节点和右子节点 节点都看成一棵相对于父节点较小的二叉树 即 子二叉树在二叉查找树中的每一个节点还包含键和值有了定义 那么该怎么是实现 从节点定义开始 节点的定义类似于java集合源码中的Tr...原创 2020-02-01 00:08:13 · 57 阅读 · 0 评论