1、开放地址法 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。 公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) 2、再hash法 再哈希法又叫双哈希法,有多个不同的Hash函数 ...
分类:
其他好文 时间:
2021-05-25 17:44:53
阅读次数:
0
经典规则:如果重写了equals,必须重写hashCode 为什么??? 这个规则考虑的应用场景:如果你的对象可能放入HashMap,HashSet,不重写会出问题 问题场景: new一个对象,重写了equals,但是没有重写hashCode,再new一个对象,原对象.equals(新对象)等于tr ...
分类:
其他好文 时间:
2020-08-18 13:18:40
阅读次数:
49
一个在阿里云打工的清华学渣!图by:石头背景其实这个问题我之前也看到过,刚好在前几天,洪教授在某个群里分享的一个《一些有意思的***手段.pdf》,我觉得这个话题应该还是有不少人不清楚的,今天我就准备来“实战”一把,还请各位看官轻拍。洪强宁(洪教授),爱因互动创始人兼CTO,曾任豆瓣首席架构师,为中国Python用户组(CPUG)的创立者之一。这才是真大佬,原来洪教授在宜信的时候,就有分享过这个内容
分类:
其他好文 时间:
2020-08-04 10:10:42
阅读次数:
78
1、初始化容量 当我们根据key的hash确定其在数组的位置时,如果n为2的幂次方,可以保证数据的均匀插入,如果n不是2的幂次方,可能数组的一些位置永远不会插入数据,浪费数组的空间,加大hash冲突; 一般我们可能会想通过 % 求余来确定位置,只不过性能不如 & 运算。而且当n是2的幂次方时:has ...
分类:
其他好文 时间:
2020-07-11 15:34:24
阅读次数:
75
插入或更新节点 根据(n - 1) & hash计算得到插入的数组下标i,然后进行判断 table[i]==null 那么说明当前数组下标下,没有hash冲突的元素,直接新建节点添加。 table[i].hash == hash &&(table[i]== key || (key != null & ...
分类:
其他好文 时间:
2020-06-21 15:33:26
阅读次数:
57
1. 建立部分索引(取长度和区分度的平衡) 2. 新建一列,存入其hash值(哈希函数不要使用SHA1(),MD5(),因为会产生很长的字符串,浪费空间,比较也慢,最好是返回整数的hash函数),在该列建立索引,查询时必须在where子句中包含常量值,以避免hash冲突。 SELECT * FROM ...
分类:
数据库 时间:
2020-06-16 00:44:39
阅读次数:
102
1.你知道HashMap底层的数据结构是什么样的吗? 底层最核心的数据结构是数组,我们构造一个map,往里面放入数据,比如我们放入key为张三,value为测试数据,对张三计算出一个hash值,根据这个hash值对数组进行取模,就会定位到数组里的一个元素中去 2.jdk1.8中对hash算法和寻址算 ...
分类:
其他好文 时间:
2020-05-31 22:10:53
阅读次数:
101
LINK: "模板 树同构" 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构。 由于时无根的 所以一个比较显然的想法暴力枚举根。 然后做树hash或者树的最小表示法。 前者做一次时n^2logn的 而后者则是严格的n^2logn的。 这样加上暴力枚举根就是n ...
分类:
其他好文 时间:
2020-04-16 15:24:26
阅读次数:
64
map相关类和其他集合类(List,Set等)的接口并不一致。map类继承自Map接口,而其他集合类继承自Collection接口,Collection接口继承自Iterable接口。凡是被Iterable接口修饰的类都是可以得到对应Iterator接口实现迭代遍历的。 遍历map 在java8之前 ...
分类:
编程语言 时间:
2020-03-31 22:58:50
阅读次数:
95
处理冲突的几种方法: 一、 开放定址法 Hi=(H(key) + di) MOD m i=1,2,...k(k<=m-1)其中H(key)为哈希函数;m为哈希表表长;di为增量序列。 开放定址法根据步长不同可以分为3种: 1)线性探查法(Linear Probing):di=1,2,3,...,m- ...
分类:
其他好文 时间:
2020-03-28 13:05:59
阅读次数:
60