【数据结构与算法之美】学习笔记 Day10 哈希表(Hash Table)的实现与特性

一、哈希表(Hash Table)

哈希表,也叫散列表,根据键(Key)而直接访问在内存存储位置的数据结构,通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度

key-value 对,key 不重复

映射函数称做“哈希函数”,存放记录的数组称做“哈希表”或者“散列表”

映射的位置,即为哈希表的下标 Index

哈希表中不可能存储引用数据类型的对象数据,只是存储引用,即存储对象数据的地址

二、工程实践

  • 电话号码簿
  • 用户信息表
  • 缓存(LRU Cache)
  • 键值对存储(Redis)

三、Hash Function 哈希函数

散列表设计的关键

关键在于 hash 函数,设计好,冲突较少,能够让数值分散均匀,否则,较为集中,导致单链表太多,效率降低,时间复杂度由 O(1) 变为 O(n)

简单哈希函数

简单的哈希函数,把每一个字符,它的 ASCII 码加在一起,然后再 mod(取模)上一个数,最后的结果是多少就是多少

四、Hash Collisions 哈希冲突

散列表冲突的解决方法:拉链式解决冲突法

五、Java Map 实现

Map 定义

Java 中的 Map 定义为一个接口,接口就是定义一种能力,没有具体代码实现,具体实现交由子类完成

public interface Map<K,​V>

常见子类

HashMap、TreeMap、HashTable、ConcurrentHashMap、LinkedHashMap、Properties

HashMap JDK 11 代码结构

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable {
   

    static class Node<K,V> implements Map.Entry<K,V> {
   
        final int hash;
        final K key;
        V value;
        Node<K,V> next;

        ......

    }

    public V put(K key, V value) {
   
        return putVal(hash(key), key, value, false, true);
    }

    ......
    
}

TreeMap JDK 11 代码结构

public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable{
   

    private final Comparator<? super K> comparator;

    private transient Entry<K,V> root;

    ......

}

Hashtable JDK 11 代码结构

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值