当前位置:网站首页>散列表简述
散列表简述
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
边栏推荐
猜你喜欢
随机推荐
【时间序列模型】AR模型(原理剖析+MATLAB代码)
2022-07-25 第六小组 瞒春 学习笔记
lammps学习(二)联合原子模型聚乙烯拉伸
js中的join()方法
DOM —— 元素盒子模型
为什么四个字节的float表示的范围比八个字节的long要广
时频分析之Wigner-Ville分布
事件对象,事件流(事件冒泡和事件捕获)、事件委托、L0和L2注册等相关概念及用法
第六章-6.1-堆-6.2-维护堆的性质-6.3-建堆
DOM — 元素的增删改查
集成电路实践----D触发器
【Anaconda】一行语句解决Spyder启动问题
第三章-函数的增长-3.1-渐近记号
this beta version of Typora is expired, please download and install a newer version.Typora的保姆级最新解决方法
初识art-template模板引擎
排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之近似熵
如何正确且快速的清楚C盘!!释放C盘空间内存保姆级教程
lambda表达式、Stream接口及Optional类
2022-02-14 第五小组 瞒春 学习笔记
JSP技术