13.散列表下(Hash Table)

优秀的散列函数

  • 设计不能太复杂避免消耗计算时间
  • 生成的值尽可能随机且均匀分布

装载因子过大?——动态扩容(阈值设置权衡时间空间复杂度)

避免低效扩容?
装载因子达阈值后,只申请新空间,将新数据插入新散列表,变更从旧散列表搬移一个数据到新散列表。

冲突解决方法选择?

开放寻址法(数据量小、装载因子<1适用)

  • 优:利用CPU缓存加快查询速度、序列化较简单
  • 缺:需特殊标记已删除数据、浪费内存空间

链表法(存储对象大、数据量大适用)

  • 优:内存利用率高、对大装载因子容忍度高,支持更多优化策略:用红黑树代替链表
工业级的散列表要求&实现?
  • 支持快速的查询、插入、删除操作(设计合适的散列函数)
  • 内存占用合理(定义装载因子阈值,设计动态扩容策略)
  • 性能稳定(选择合适的散列冲突解决方法)

LRU缓存淘汰算法

缓存(cache)系统操作:添加、删除、查找数据

【散列表(查找)+双向链表】(LinkedHashMap)
双向链表存储数据,结点=存储数据(data)+前驱指针(prev)+后继指针(next)+特殊字段(hnext将结点串在散列表的拉链中)

你可能感兴趣的:(13.散列表下(Hash Table))