当前位置:网站首页>散列表简述
散列表简述
2022-08-02 14:22:00 【半度纳】
什么是散列表:
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫
做散列函数,存放记录的数组叫做散列表。
散列表是查询效率最高的(底层是数组 )
加载因子 :
默认0.75 加载因子=实际保存数量/总容量当散列表中保存元素数量超过加载因子对应的最大数量 时,散列表会进行扩容,每次扩 容为原来的2倍
应用:HashMap保存数据过程
相关面试题
==和equals的区别
== 两侧若为基本数据类型,则进行数值比较;若两侧为引用类型,则比较地址
equals: 是Object提供的方法,在Object类中,其作用等同于==,用于比较对象的地址是否相等;Java强烈建议在子类中重写该方法,使其具有实际的逻辑意义.
问题1:若两个对象调用hashcode方法生成的整数相同,两个对象equals的结果一定为true吗?
不一定
问题2: 两个对象的euqals结果为true,分别调用hashcode方法生成的整数一定相同吗?
一定相同
HashMap,HashTable,ConcurrentHashMap的区别
1. HashMap是非线程安全的,HashTable和ConcurrentHashMap都是线程安全的
2. 非线程安全的散列表的key和value均可以为null;线程安全的散列表的key和value均不可以为null
3. HashTable和ConcurrentHashMap的区别为:
HashTable是通过给散列表加锁的方式来保证线程安全,这种方式并发执行效率低.
在JDK1.8之前,ConcurrentHashMap通过分段锁机制来保证线程安全的,这种方式可以在保证线程安全的同时提高并发执行效率.
从JDK1.8开始,ConcurrentHashMap的数据结构和1.8中的HashMap一致,均为数组+链表+红黑树;此时通过乐观锁和Synchronized来保证线程安全.当多线程并发向同一个散列桶添加元素,此时散列桶为null,通过乐观锁来保证线程安全;若散列桶不为null,通过给头结点添加锁(synchornized)的方式来保证线程安全.
1.8中的方式同样可以在保证线程安全的同时提高并发执行效率.
比如:多线程并发向不同的散列桶中添加元素,则是完全并发的
ConcurrentHashMap的数据结构
- jdk1.8之前,ConcurrentHashMap采用分段锁机制来保证线程安全,这种方式可以提高并发执行效率.
- JDK1.8开始,ConcurrentHashMap的数据结构与JDK1.8中HashMap的数据结构一致(数组+链表+红黑树).通过乐观锁和Synchronized配合来保证线程安全的
————————————————
版权声明:本文为CSDN博主「孙慧德」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunhuide/article/details/125652196
边栏推荐
- 2022-07-19 第五小组 瞒春 学习笔记
- FIR滤波器设计之窗函数法
- 解决(An error happened during template parsing (template: “class path resource [templates/...]
- makefile——杂项
- nodemon : 无法加载文件 D:\Program Files\nodejs\node_global\nodemon.ps1
- 为什么四个字节的float表示的范围比八个字节的long要广?
- 为什么四个字节的float表示的范围比八个字节的long要广?
- 【js手风琴效果案例】
- 数据库性能优化的误区!
- nvm详细安装步骤以及使用(window10系统)
猜你喜欢
随机推荐
Nvm,Nrm使用教程
JS本地存储(附实例)
2022-07-21 第六小组 瞒春 学习笔记
DOM - page rendering process
【web渗透】文件包含漏洞入门级超详细讲解
【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)
Filter 过滤器
Servlet 技术2
Redis + Caffeine实现多级缓存
2022-7-15 第五组 瞒春 学习笔记
【路由器与交换机的作用与特点 】
【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)
2022-02-14 第五小组 瞒春 学习笔记
DOM - Event Delegate
nvm管理node版本 nodenpm不是内部或外部命令,也不是可运行的程序
延时函数-定时器
golang时间-时间戳的获取-转换-计算
电设3----脉冲信号测试仪
DOM - Event Object
【js手风琴效果案例】