当前位置:网站首页>散列表简述
散列表简述
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
边栏推荐
猜你喜欢
随机推荐
详解C语言中的位操作运算符可以怎么用?
abstract和接口的基础知识
XML和注解(Annotation)
DOM —— 事件机制及事件链
2022/7/15,我的人生中第一篇博客,不忘初心,砥砺前行!
DOM —— 事件类型
2022-07-16 第五小组 瞒春 学习笔记
Cookie 和 Session
Impulse response invariant method and bilinear transformation method for IIR filter design
makefile——杂项
nodemon : 无法加载文件 D:\Program Files\nodejs\node_global\nodemon.ps1
idea使用jdbc对数据库进行增删改查,以及使用懒汉方式实现单例模式
炎炎夏日打造一个属于自己的“便携小空调”吧
DOM - Event Mechanism and Event Chain
【数据读写】csv文件与xls/xlsx文件
velocity模板页面四则运算
【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)
web渗透之sql注入
为什么四个字节的float表示的范围比八个字节的long要广
static关键字的三种重要作用详解