JAVA数据结构--哈希表的实现(分离链接法)

JAVA数据结构--哈希表的实现(分离链接法)

哈希表(散列)的定义

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表的特点是采用以常数平均时间执行插入、删除和查找。

一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名x到首字母F(x)的一个函数关系),在首字母为W的表中查找“王”姓的电话号码,显然比直接查找就要快得多。这里使用人名作为关键字,“取首字母”是这个例子中散列函数的函数法则F(),存放首字母的表对应散列表。关键字和函数法则理论上可以任意确定。

分离链接法定义

将散列到同一个值得所有元素保留到一个表中。

基本思想是采用N个链表组成链表数组,N为哈希表的长度。

哈希表构造实现
1 public SeparateChainingHashTable() {
2         this(DEFAULT_TABLE_SIZE);
3     }
4 public SeparateChainingHashTable(int size) {
5     theLists=new LinkedList[nextPrime(size)];
6     for(int i=0;i<theLists.length;i++) {
7         theLists[i]=new LinkedList<>();//初始化链表数组
8     }
9 }
基本操作实现
 1 /*
 2      * 哈希表插入元素
 3      * */
 4     public void insert(T x) {
 5         List<T> whichList=theLists[myhash(x)];
 6         /*
 7          * 如果当前哈希地址的链表不含有元素,则链表中添加该元素
 8          * */
 9         if(!whichList.contains(x)) {
10             whichList.add(x);
11             
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值