哈希
1.哈希函数的概念:
哈希函数是将一组任意长度的串映射为固定长度的字符串。在JAVA中,求对象的哈希值是用.hashCode()方法。该方法在Object中已经有实现。
2.哈希表
哈希表是指使用对象的哈希值作为对象的索引的数组。
3.哈希表的写入
4.哈希冲突(哈希碰撞)
当要插入的两个不同的对象的hash值一样时,我们称发生了hash碰撞。解决办法有2个:
1)开放寻址法:基本思路是当发生碰撞时,将该元素往数组中下一个空位置存。ThreadLocal使用的就是开放寻址法。
2)链表法:哈希表中的每一个元素不仅是一个entry对象,还是一个链表的的头节点。当发生哈希碰撞,新来的元素将被加到这个链表的尾部。HashMap使用的就是链表法。
5.哈希表的读取
6.哈希表的扩容(resize)
哈希表有两个属性:最大容量Capacity和负载因子LoadFactory。当元素数量/Capacity>=LoadFactory时,会进行扩容,新建一个哈希表,将Capacity扩大两倍。然后所有元素再重新hash进扩容后的哈希表。

浙公网安备 33010602011771号