首页 > 试题广场 >

java8中,下面哪个类用到了解决哈希冲突的开放定址法

[单选题]
java8中,下面哪个类用到了解决哈希冲突的开放定址法
  • LinkedHashSet
  • HashMap
  • ThreadLocal
  • TreeMap
ThreadLocalMap中使用开放地址法来处理散列冲突,而HashMap中使用的是分离链表法。之所以采用不同的方式主要是因为:在ThreadLocalMap中的散列值分散得十分均匀,很少会出现冲突。并且ThreadLocalMap经常需要清除无用的对象,使用纯数组更加方便。
发表于 2019-07-03 14:53:49 回复(15)
ThreadLocalMap通过key(ThreadLocal类型)的hashcode来计算数组存储的索引位置i。如果i位置已经存储了对象,那么就往后挪一个位置依次类推,直到找到空的位置,再将对象存放。另外,在最后还需要判断一下当前的存储的对象个数是否已经超出了阈值(threshold的值)大小,如果超出了,需要重新扩充并将所有的对象重新计算位置。
发表于 2019-06-28 00:00:23 回复(2)

threadlocal 使用开放地址法 - 线性探测法:当前哈希槽有其他对象占了,顺着数组索引寻找下一个,直到找到为止


hashset 中调用 hashmap 来存储数据的,hashmap 采用的链地址法:当哈希槽中有其他对象了,使用链表的方式连接到那个对象上

发表于 2019-07-25 19:40:37 回复(1)
开放定址法:基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。
再哈希法:这种方法是同时构造多个不同的哈希函数:Hi=RH1(key) i=1,2,…,k当哈希地址Hi=RH1(key)发生冲突时,再计算Hi=RH2(key)……,直到冲突不再产生。这种方法不易产生聚集,但增加了计算时间。
链地址法:这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。

发表于 2020-03-10 15:28:57 回复(1)

hashset和hashmap通常是使用分离链接散列实现的。

发表于 2019-07-02 13:58:33 回复(0)
我醉了,你随意

发表于 2022-05-03 14:40:45 回复(4)
我东哥把你当兄弟,你既然还做错
发表于 2019-08-27 18:40:29 回复(2)
HashMap采用了链地址法,ThreadLocalMap则是开放地址法。

开放定址法:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败。 

链地址法:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。


发表于 2020-03-05 22:06:10 回复(2)
hashmap不是吗??

发表于 2019-07-02 13:27:05 回复(2)
threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据,官方解释如下。
发表于 2019-10-14 09:47:24 回复(0)
都说 thread local 使用开放定址发,不应该选c吗
发表于 2022-07-04 18:36:54 回复(1)
threadlocal map使用开放定址法解决hash冲突,hashmap使用链地址法解决hash冲突
发表于 2022-05-28 16:39:27 回复(0)
hashmap不是用的链地址法嘛,这题为啥选B hashmap, 我不理解🤣
发表于 2022-04-21 10:13:56 回复(5)
看图,看到这里使用了nextInt即求下一个hash的位置

LinkedListSet并没有实现add方法,使用的是HashSet的add方法,而HashSet的add方法则是使用map:



发表于 2021-09-22 22:02:28 回复(0)
答案错了,只有ThreadLocal类用到了开放地址发
发表于 2023-02-19 14:57:10 回复(0)
这答案是不是错了?hashmap是链地址法呀
发表于 2022-07-04 21:30:46 回复(0)
为什么大家解析选C,正确答案是B,我不能李姐
发表于 2022-05-13 22:40:10 回复(2)
我做这道题的时候第一次答案是ThreadLocal,第二次做答案是hashmap。。。
发表于 2022-04-14 13:28:16 回复(1)
threadlocal 使用开放地址法 - 线性探测法:当前哈希槽有其他对象占了,顺着数组索引寻找下一个,直到找到为止 hashset 中调用 hashmap 来存储数据的,hashmap 采用的链地址法(分离链表法):当哈希槽中有其他对象了,使用链表的方式连接到那个对象上
发表于 2019-10-26 11:52:48 回复(0)

ThreadLocalMap使用开放地址法解决散列冲突,而HashMap 使用分离链表法

编辑于 2019-09-23 15:29:45 回复(0)