当前位置: 首页 > wzjs >正文

室内设计设计师网站推荐周口网站制作

室内设计设计师网站推荐,周口网站制作,宁波网络推广平台哪里有,wordpress自适应导航模板1. 基本概念 定义:通过键(Key)直接访问值(Value)的数据结构,基于哈希函数将键映射到存储位置。 核心操作: put(key, value):插入键值对 get(key):获取键对应的值 remo…
1. 基本概念
  • 定义:通过键(Key)直接访问值(Value)的数据结构,基于哈希函数将键映射到存储位置。

  • 核心操作

    • put(key, value):插入键值对

    • get(key):获取键对应的值

    • remove(key):删除键值对

  • 时间复杂度(平均):

    • 插入、查找、删除:O(1)

    • 最坏情况(哈希冲突严重时):O(n)


2. 哈希函数设计
  • 作用:将任意大小的键转换为固定大小的哈希值(通常为整数)。

  • 设计要求

    • 一致性:相同键必须产生相同哈希值

    • 均匀性:不同键应均匀分布,减少冲突

  • 常见哈希函数

    // Java的String.hashCode()实现
    public int hashCode() {int h = 0;for (char c : value) {h = 31 * h + c;}return h;
    }

3. 哈希冲突解决

当不同键映射到同一位置时:

  • 链地址法(Separate Chaining):

    • 每个桶(bucket)存储链表或红黑树(如Java 8+的HashMap)

    • 冲突时,新元素添加到链表末尾

  • 开放寻址法

    • 线性探测:冲突后顺序查找下一个空槽

    • 平方探测:按平方步长跳跃查找


4. 负载因子与扩容
  • 负载因子(Load Factor)

    • 定义:元素数量 / 桶数量(默认0.75)

    • 作用:触发扩容的阈值(如Java HashMap)

  • 扩容机制

    • 新容量通常为原来的2倍

    • 重新计算所有键的哈希位置(rehash)


5. 常见实现对比
HashMapHashtableConcurrentHashMap
线程安全不安全安全(全表锁)安全(分段锁)
Null键值允许不允许不允许
性能中等

6. Java中的关键实现细节
  • HashMap的树化优化

    • 当链表长度≥8且桶数量≥64时,链表转为红黑树(防止DoS攻击)

  • 哈希扰动函数

    
    static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }
    • 通过异或高位和低位,减少哈希冲突


7. 经典应用场景
  1. 快速查找

    • 如两数之和(LeetCode 1)

    
    // 两数之和解法
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {int complement = target - nums[i];if (map.containsKey(complement)) {return new int[]{map.get(complement), i};}map.put(nums[i], i);
    }
  2. 缓存实现(如LRU Cache)

  3. 去重统计(如统计词频)


8. 常见面试问题
  • Q1:HashMap如何解决哈希冲突?
    A:链地址法(链表+红黑树)。

  • Q2:为什么负载因子默认是0.75?
    A:空间和时间成本的折中(数学证明较优)。

  • Q3:HashMap为什么线程不安全?
    A:多线程扩容可能导致死循环或数据丢失。


9. 手写简易Hashtable(Java示例)

class MyHashtable<K, V> {private Node<K,V>[] table;private int size;private static final int DEFAULT_CAPACITY = 16;static class Node<K,V> {final K key;V value;Node<K,V> next;// 构造方法...}public V put(K key, V value) {int hash = key.hashCode();int index = (table.length - 1) & hash;Node<K,V> node = table[index];while (node != null) {if (node.key.equals(key)) {V oldValue = node.value;node.value = value;return oldValue;}node = node.next;}Node<K,V> newNode = new Node<>(key, value, table[index]);table[index] = newNode;size++;return null;}
}

掌握这些核心知识点后,你就能在面试和实际开发中游刃有余地使用哈希表!

http://www.dtcms.com/wzjs/580147.html

相关文章:

  • 商贸公司网站建设极致发烧房产信息网上自助查询系统
  • win10怎么做网站网络营销就业方向和前景
  • 江苏网页设计报价seo推广优化外包公司
  • 绍兴企业网站建站模板电脑建立网站
  • 深圳网站设计多少钱wordpress建站模板
  • 东莞百度搜索网站排名安徽省住房建设部官方网站
  • 教育网站建设 飞沐标书制作难吗
  • 钱币网站建设网站开发主要技术
  • 搭建网站账户系统泉州市建设局网站公示
  • 沈阳建网站电商大量增加告权重网站友链回提升网站权重吗
  • 网站建设外包发展情况男女性男女直接做的视频网站
  • 织梦网站首页怎么修改公司网站建设收费
  • 苏州装修公司网站建设沈阳网站建设黑酷科技
  • 阿里云空间部署网站吗网站建设哪里便宜
  • 郑州网站优化pc 手机网站
  • 免费源码网站it运维职业规划
  • 域名 放别人网站青岛万维网站设计
  • 广州建设工程交易中心网站织梦网站怎么建设
  • 公司网站开发费用计入什么科目求职
  • 不会编码可以做网站优化吗办公空间设计说明范文
  • 电商培训课程苏州关键词优化软件
  • 怎么用腾讯云做网站还原wordpress站点地址恢复
  • 金昌市建设工程质量监督站网站wordpress 表情包
  • 济南网站维护公司wordpress超链接颜色
  • 东莞网站开发哪家好在哪里做网站比较好
  • 潍坊 开发区网站建设在演示文稿上网站怎么做
  • php网站建设论文答辩wordpress进入中国市场
  • 网站开发的意义和作用江苏城乡住房和城乡建设厅网站
  • 制作网站参考案例哪些网站适合用自适应
  • vs python 网站开发湖州网站制作