1.使用多个映射的例:
1)构建一个Map结构key为单词,值为所有单词中与key值仅有一个单词不同时的list集合;-----96s
2)构建一个Map结构,key为单词长度,值为所有长度为key值的list集合,然后把这几个map分别执行1)中提到的方式;--------51s
3)将长度一致的单词放到一个list中,然后将ine为key,wine、hine组成的list为value,最后循环遍历这个list,形成最终key为单词,value是多个wine、hine组成的list。----------4s
2.散列
利用散列函数将key值转换成一个int值,好的散列函数尽量将int值分配的较为均匀,这样不浪费空间,而且多个不同key值,散列为一个int值的情况也不多,即同一位置存储的值不会很多。
3.分离链接法:
多个key值映射到一个位置时,多个value值形成一个链表(linkedList)。装载因子(λ)是总的元素个数比表的大小,平均来看,分离链接法的装载因子是1。且查找元素的平均复杂度为1+λ/2,所以影响查找效率的是装载因子而不是表的大小。
4.探测散列方法
当通过散列函数得到的位置处有值时,通过(h(x)+f(i)) mod TableSize再次寻找位置看是否合适
若f(i)=i 则为线性探测法,若f(i)=i*i则为平方探测法,若f(i)=i*hash2(x);则为二次散列法,hash2是第二个散列函数,这个函数一般为R-(x mod R),其中R为小于表尺寸的素数。表的尺寸应为素数,不然若hash2算出的值若为表长的一个因子,那么可以探测出的值就是有限的!
5.再散列
对于表中的数据量到达一定程度时,将表的大小进行扩充;新建一个更大的表,把旧的数据填入其中
6.利用hash的HashMap和hashSet,都是无序的