散列结构的实现

散列表的实现是一种在时间和空间上做出权衡的方式。对于数组存储,如果们没有内存限制,则可以直接将数据作为键作为数组的索引,那么所有的查询操作都只需要一次访问内存即可完成。但是当键很多的时候,需要的内存会非常大,所以这种方式不可能实现。另一方面,如果没有时间限制,我们可以对数组进行遍历查找,来查询数组里面的数据。这样会耗费比较多的时间。散列表是一种折中的方法,在这两个极端之间找到一个权衡。

散列表的两个步骤:

第一:利用对象的hashCode()函数,求出对象的hash值,利用hash函数(hash函数有很多,这里使用除留余数法),将对象的hash值映射到内存中去(即求出在数组中的索引)。

第二:在映射的过程中,当两个不同的对象可能会映射到同一个内存单元中时,就发生了碰撞冲突,第二部就是要解决碰撞冲突问题。这里是利用链表,每个数组单元中,存放一个链表。将映射到同一内存单元的多个元素,存放到链表中。


散列表的构造主要就是这两步:

第一:根据hashCode与合适的散列函数算法,将存储对象均匀散列到存储数组中去。哈希算法还有很多种,直接定址法,除留余数法等等

第二:解决碰撞冲突问题。解决方法有,分离链接法,开放定址法等等

这是散列结构的实现,后期我会做一个JAVA实例。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值