深入理解Hashtable

本文详细介绍了哈希表的基础知识,包括Hashtable的特性,以及为何使用哈希表。哈希表通过散列函数将数据映射到数组中,解决了大数组和非整数元素的问题。然而,哈希冲突是个挑战,文中提到了开放寻址法、再散列法和公共溢出区等解决冲突的方法。
摘要由CSDN通过智能技术生成

一、基本知识

Hashtable它是一个散列表,它存储的内容是键值对映射。

Hashtale继承于Dictionary,实现了Map、Cloneable、Java.io.Serializable接口。

Hashtable的函数是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。

二、优势所在

将数据存储在数组中,并通过数组下标搜索会出现两个问题:

1.如果所有元素是16-bits且不带正负号的整数,我们可以用一个拥有65536个元素的arry A,初值全部为0,每个元素值代表相应元素出现的次数(如果插入元素i,就执行A[i]++,如果删除元素i,就执行A[i]--,如果搜查元素i,就检查A[i]是否为0)。于是,不论是插入、删除、搜索每个操作都在常数时间内完成。但是,若元素是32-bits,我们所准备的arry A的大小就必须是2^32 = 4GB,这就大的不太切合实际。

2.如果元素形态是字符串或其他,而非整数,将无法被拿来作为arry的索引。

此问题的解决:

    例如:数值1234是由阿拉伯数字1,2,3,4构成的一样,字符串“jjhou”是由字符‘j’,‘j’,‘h’,‘o’,‘u’构成,那么,既然数值1234是1*10^3+2*10^2+3*10^1+4*10^0,我们也可以将字符编码,每个字符以一个7-bits数值表示(也就是ASCII编码),从而将字符串“jjhou”表现为:

'j'*128^4 + '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值