首页 > 试题广场 >

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

[单选题]
java8中,下面哪个类用到了解决哈希冲突的开放定址法 
  • LinkedHashSet
  • HashMap
  • ThreadLocal
  • TreeMap

threadlocalmap使用开放定址法解决haah冲突,hashmap使用链地址法解决hash冲突

发表于 2019-07-05 18:19:18 回复(18)
散列表之开放定址法 在前面的文章中我们介绍过《散列表之链接法》,在链接法中,如果不同键值却将有相同的映射值,即有不同键值的元素却映射到散列表中的同一位置,那么就采用链表的方法,将映射到同一位置的元素插入到同一个链表之中,当需要删除, 查询元素时,只需要遍历该链表即可,链接法在最坏情况下删除和查询元素的时间代价为O(n)O(n) 今天我们来讲散列表中另外一种解决冲突的方法,那就是开放定址法(open addressing)。 假如你在外面旅游时,吃坏东西,急需上厕所,当你好不容易找到一件洗手间的时候,发现排了好多人,这时你会怎么做? 如果是链接法:排队不就行了,我就在外面等,迟早会排到我的 如果是开放定址法:直接放弃现有厕所,去寻找新的厕所 没错,放弃已被占用的位置,寻找新的插入位置就是开放定址法的思想,开放定址法中的开放二字指的是没有被占用的位置,定址指的是确定位置。开放定址法中,所有的元素都放在散列表中(链接法放在链表中)。也就是说散列表中的每一个位置,要么有元素,要么没有元素。当需要删除,查询元素时,我们从某一个位置开始,按照某种特定的确定下一个位置的方法来检查所有表项,直到找到目标元素,或者没有找到。
发表于 2019-07-29 09:01:27 回复(12)
发表于 2020-03-08 16:40:58 回复(6)
ThreadLocalMap使用开放定址法解决hash冲突,HashMap使用链地址法解决hash冲突。
发表于 2019-09-16 16:17:11 回复(0)
处理冲突的方法有开放地址法,再hash法,链地址法等。HashMap使用的是链地址法来解决冲突的
发表于 2019-08-26 10:55:22 回复(0)
当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
发表于 2019-06-19 15:28:03 回复(2)
HashMap使用链地址法解决哈希冲突;
ThreadLocal使用开放定址法解决哈希冲突。
发表于 2022-01-12 22:18:23 回复(0)

解析:解决哈希冲突的方法有四种,开放地址法、再哈希法、拉链法、公共溢出法,详情参考:https://www.cnblogs.com/little-fly/p/7907935.html,Java8里面,HashMap使用拉链法,ThreadLocal采用开放地址法。

发表于 2020-03-19 20:03:00 回复(0)
开放定址法:此方法即在冲突发生时,通过函数hi(X)=(Hash(X)+F(i))mod TableSize将新插入的元素的放到一个新的空位上。也就是发生哈希冲突时,通过自定义的函数把冲突元素放到一个新的位置上,发生在一个数组上。
函数:1、线性探测法:发生冲突,平移到下一个位置,但是可能发生元素聚集问题。2、平方探测法。
LinkedHashSet:底层是LinkedHashMap,数组加双向链表。通过哈希值决定存储位置,通过双向链表维持次序。
HashMap:底层数组加链表加红黑树(老熟人了)
ThreadLocal:jdbc时保证每个线程开始到结束得到的都是同一个数据库连接(事务的提交和回滚不会发生问题)。底层:ThreadLocal的
get()方法得到的是当前线程的成员变量threadLocals(Thread类的成员变量,所以它对于每个线程都是相互独立的), threadLocals本质
是一个ThreadLocalMap(并没有实现Map接口),Entry(ThreadLocal<?> k, Object v) 底层是一个数组,但是也使用哈希算法确定存储位
置,不过使用开放定址法解决哈希冲突。
TreeMap:数组加红黑树(有序,线程不安全,不允许空值空键)

发表于 2022-09-19 22:57:09 回复(0)
百度上找到的一个解析:https://blog.csdn.net/zeb_perfect/article/details/52574915
发表于 2022-01-24 10:04:56 回复(0)
  • 在Java 8 之前,HashMap和其他基于map的类都是通过链地址法解决冲突。
  • 从Java 8开始,HashMap,ConcurrentHashMap和LinkedHashMap在处理频繁冲突时将使用平衡树来代替链表。
  • 在 TreeMap 中,哈希冲突是通过红黑树的数据结构来解决。
发表于 2023-10-14 15:59:33 回复(0)
转+补充
TreeMap:数组加红黑树(有序,线程不安全,不允许空值空键)LinkedHashSet:底层是LinkedHashMap,数组加双向链表。通过哈希值决定存储位置,通过双向链表维持次序。 ThreadLocal:jdbc时保证每个线程开始到结束得到的都是同一个数据库连接(事务的提交和回滚不会发生问题)。底层:ThreadLocal的 get()方法得到的是当前线程的成员变量threadLocals(Thread类的成员变量,所以它对于每个线程都是相互独立的), threadLocals本质 是一个ThreadLocalMap(并没有实现Map接口),Entry(ThreadLocal k,Object v) 底层是一个数组,但是也使用哈希算法确定存储位 置,不过使用开放定址法解决哈希冲突。

关于ThreadLocal关键字的更多理解:理解Java中的ThreadLocal - 技术小黑屋 (droidyue.com)
发表于 2023-05-10 14:11:19 回复(0)
答案改过来了,可我还选了原来错误的答案
发表于 2023-03-21 21:03:16 回复(0)
hashmap 使用链地址法解决哈希冲突,threadLocalMap使用开放地址法解决哈希冲突。
发表于 2023-03-16 16:32:07 回复(0)
马克
发表于 2023-02-28 11:27:47 回复(0)
local有地址的意思
发表于 2022-12-12 17:21:36 回复(0)
TreeMap:数组加红黑树(有序,线程不安全,不允许空值空键)LinkedHashSet:底层是LinkedHashMap,数组加双向链表。通过哈希值决定存储位置,通过双向链表维持次序。 ThreadLocal:jdbc时保证每个线程开始到结束得到的都是同一个数据库连接(事务的提交和回滚不会发生问题)。底层:ThreadLocal的 get()方法得到的是当前线程的成员变量threadLocals(Thread类的成员变量,所以它对于每个线程都是相互独立的), threadLocals本质 是一个ThreadLocalMap(并没有实现Map接口),Entry(ThreadLocal k,Object v) 底层是一个数组,但是也使用哈希算法确定存储位 置,不过使用开放定址法解决哈希冲突。
发表于 2022-11-21 16:59:23 回复(0)
threadlocalmap使用开放定址法解决hash冲突,hashmap使用链地址法解决hash冲突
发表于 2022-10-18 11:05:14 回复(0)

到底选哪个两个不同的答案

发表于 2022-10-13 15:12:12 回复(0)
🌝🌝遇到有一题是选C,懵逼了
发表于 2022-05-01 23:34:59 回复(0)