HashMap是什么?
2023-05-22
数据结构
定义参数
基本特性
HashMap 中允许 null 值和 null 键。 null 键对应着哈希值0,即数组的下表空氏0。
HashMap 是不保证对象的放入顺序的。
基本操作 get 和`put的时间性能基本为 (如果不考虑哈希冲突的情况下)。
读
判断hash/key,key值是否相等,hash值是否相等
判断是否是TreeNode,如果是从根节点二分查找(**问题TreeNode.find的最后的if else)
写
判断table是否存在
判断节点是否存在
如果是Tree节点,执行RB插入;
如果不是Tree节点,执行链表插入,如果大于TREEIFY_THRESHOLD,则树化。
扩容
计算新容量和新扩容阈值
拷圆亏尘橘禅贝
树和链表转换
保持节点相对顺序。
使用类和哈希值进行比较。
在哈希值随机且扩容阈值为默认值0.75的情况下,哈希表每个桶的频率遵循 的 泊松分布 。由于扩容时粒度较大,进而导致泊松分布的方差也很大。如果忽略方差的因素,哈希表桶列表长度为 的概率为 。第一批值如下:
哈希算法
冲突解决方法
数据结构
定义参数
基本特性
HashMap 中允许 null 值和 null 键。 null 键对应着哈希值0,即数组的下表空氏0。
HashMap 是不保证对象的放入顺序的。
基本操作 get 和`put的时间性能基本为 (如果不考虑哈希冲突的情况下)。
读
判断hash/key,key值是否相等,hash值是否相等
判断是否是TreeNode,如果是从根节点二分查找(**问题TreeNode.find的最后的if else)
写
判断table是否存在
判断节点是否存在
如果是Tree节点,执行RB插入;
如果不是Tree节点,执行链表插入,如果大于TREEIFY_THRESHOLD,则树化。
扩容
计算新容量和新扩容阈值
拷圆亏尘橘禅贝
树和链表转换
保持节点相对顺序。
使用类和哈希值进行比较。
在哈希值随机且扩容阈值为默认值0.75的情况下,哈希表每个桶的频率遵循 的 泊松分布 。由于扩容时粒度较大,进而导致泊松分布的方差也很大。如果忽略方差的因素,哈希表桶列表长度为 的概率为 。第一批值如下:
哈希算法
冲突解决方法
离散数学中一组数能否简单图化需要满足以下条件:
1、对当前数列排序,使其呈递减;
2、从S[2]开始对其后S[1]个数字-1(利用了结点度);
3、一直循环直到当前序列出现负数(即不是可图的情况)或者当前序列全为0 (可图)时退出。
举例:序列S:7,7,4,3,3,3,2,1 删除序列S的首项 7 ,对其后的7项每项减1,得到:6,3,2,2,2,1,0,继续删除序列的首项6,对其后的6项每项减1,得到:2,1,1,1,0,-1,到这一步出现了负数,因此该序列是不可图的。
扩展资料:
树是n(n>0)个结点的有限集合(换句话说,树是由节点组成的)。当n=0时称为空树。
在任一非空树中:
①有且仅有一个称为该树之根的节点;
②除根结点之外的其余节点可分为有限个互不相干的集合,且其中每一个集合本身又是一棵树,称为根的子树。
这是一个递归定义,即在树的定义中又用到了树。树的定义显示了树的特性,即一棵树是由根结点和若干棵子树构成的,而子树又可由若干棵更小的子树构成。树中的每一个结点都是该树中某一棵子树的根结点。
参考资料来源:百度百科-结点度
参考资料来源:百度百科-Havel–Hakimi算法