哈希

1.哈希函数的概念:

哈希函数是将一组任意长度的串映射为固定长度的字符串。在JAVA中,求对象的哈希值是用.hashCode()方法。该方法在Object中已经有实现。

2.哈希表

哈希表是指使用对象的哈希值作为对象的索引的数组

3.哈希表的写入

4.哈希冲突(哈希碰撞)

当要插入的两个不同的对象的hash值一样时,我们称发生了hash碰撞。解决办法有2个:

1)开放寻址法:基本思路是当发生碰撞时,将该元素往数组中下一个空位置存。ThreadLocal使用的就是开放寻址法。

2)链表法:哈希表中的每一个元素不仅是一个entry对象,还是一个链表的的头节点。当发生哈希碰撞,新来的元素将被加到这个链表的尾部。HashMap使用的就是链表法。

5.哈希表的读取

 

6.哈希表的扩容(resize)

哈希表有两个属性:最大容量Capacity和负载因子LoadFactory。当元素数量/Capacity>=LoadFactory时,会进行扩容,新建一个哈希表,将Capacity扩大两倍。然后所有元素再重新hash进扩容后的哈希表。

 

posted @ 2020-09-28 22:37  日进一卒  阅读(181)  评论(0)    收藏  举报