3.散列表

一、基于拉链法的散列表

1.   拉链法:将大小为M的数组中每个元素指向一个链表,链表中的每个结点都存储了散列值为该元素的索引的键值对。
        (就像从数组中拉出来的一条链一样~发生冲突的元素都被存储在链表中了!)

2.   基本思想
  • 选择足够大的M,使得所有链表都尽可能地短,以保证高效地查找。
  • 查找分两步:首先根据散列值hash(key)找到对应的链表st[hash(key)],然后沿着链表顺序查找相应的键st[hash(key)].get(key)。
3.   实现

(1)无序链表的实现
public class SequentialSearchST<Key, Value> {
       private Node first;   //链表首结点(如果有一个无序链表,我们就可以得到它的首结点)
       
       //链表中结点的定义
       private class Node{
              Key key;
              Value val;
              Node next;
              
              public Node(Key key, Value val, Node next){
                     this.key=key;
                     this.val=val;
                     this.next=next;
              }
       }
       
       //获取指定键值为key的结点的值
       public Value get(Key key){
              for(Node x=first; x!=null; x=x.next){
                     if(key.equals(x.key))
                           return x.val ;
              }
              return null;
       }
       
       //查找给定的键,找到则更新其值,否则在表中新建结点
       public void put(Key key, Value val){
              for(Node x=first; x!=null; x=x.next){
                     if(key.equals(x.key)){
                           x.val=val;   //命中,更新其值
                           return;
                     }
              
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值