Java Hash表 数据结构
2024-09-07 06:29:34
思考:
数组由于内存地址连续,是一种查询快增删慢的数据结构;
链表由于内存地址不连续,是一种查询慢增删快的数据结构;
那么怎么实现查询又快,增删也快的数据结构呢?
要是把数组和链表结合起来会怎么样?
如下图所示这就是散列表的数据结构图,它由数组和链表构成,拥有数组和链表的优点。
那么散列表是怎么实现数据的快速查找和增删的呢?
举个例子 现在你要查找1-50之间的数45,你需要依次遍历每个元素直到找到45为止;
0->1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->21->22->23->24->25->26->27->28->29->30->31->32->33->34->35->36->37->38->39->40->41->42->43->44->45
现在有一种新的存储方式,在查找之前你需要先计算一次,再通过计算得到的值去查找,比如说先把要查找的数除以5得到余数,通过余数去查找:
0->5->10->15->20->25->30->35->40->45
通过对比是不是查找快很多了呢,而且由于是链式储存的增删过程也要快很多。
这时再回顾这个过程,先通过计算得到查询的起点,再在起点依次查询,这个计算实际上就是一次hash运算也叫做Hash函数,在实际应用中函数函数要比上面的取模运算复杂得多,但是原理是一样的。
散列表又叫做哈希表(HashTable),是根据关键码值(即键值对)而直接访问的数据结构。也就是说,它通过把关键码映射到表中一个位置来访问记录,以加快查找速度。
暂时写到这里!
最新文章
- 【系统篇】从C/C++语言到进程启动背后的故事
- PHP下使用强大的imagick轻松生成组合缩略图
- Android判断Touch为滑动事件还是操作控件
- signalR制作微信墙 开源
- Java异常机制
- Hashtable 和 HashMap 的比较
- 《APUE》第6章笔记
- (转)iOS7人机界面设计规范 - 目录
- Android 自定义shape圆形按钮
- 用Xamarin 实现园友的 :Android浮动小球与开机自启动
- WPF子窗体:ChildWindow
- (文件)图片上传,Spring或SpringMVC框架
- python爬取煎蛋图片
- this 和 new 构造函数
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(四)
- ArcGIS API for JavaScript 入门教程[3] 你看得到:数据与视图分离
- python 基础语法练习回顾
- nopi 简洁笔记
- POI导出Excel(xls、xlsx均可以,也支持图片)——(三)
- link 和 import的区别