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

黄页网站大全免费哪里做网络推广

黄页网站大全免费,哪里做网络推广,宜宾金农投资建设集团网站,贺州做网站今天来介绍一下 Dictionary 内部数据的存储方式,话不多说直接开始。 内部数据 Dictionary 采用 哈希表 的方式实现,其核心组成部分如下: // 实际内部实现(简化版) private int[] _buckets; // 桶数组,存…

        今天来介绍一下 Dictionary 内部数据的存储方式话不多说直接开始。

内部数据

        Dictionary 采用 哈希表 的方式实现,其核心组成部分如下:

// 实际内部实现(简化版)
private int[] _buckets;    // 桶数组,存储条目索引
private Entry[] _entries;  // 条目数组,存储键值对
private int _freeList;     // 空闲链表头指针private struct Entry {public uint hashCode;   // 31位哈希码(取绝对值)public int next;       // 同一桶中的下一个条目索引public TKey key;       // 键public TValue value;   // 值
}

        Entry 是Dictionary内部的一个数据结构,其中包含了四个成员变量,分别是:

  • uint hashCode:哈希码,哈希码由key生成,用于比对查找数据。
  • int next:_entries的索引值,指向下一个Entry。
  • TKey key:存储key数据。
  • TValue value:存储value数据。

        int[] _buckets 是一个 int 型的索引数组,内部存储的是 _entries 的索引值。

        Entry[] _entries 是一个 Entry 型的数组对象,是实际存储数据的地方。

        _freeList 是一个 int 整数,存储的是 _entries 索引,索引指向的是空闲Entry链表,第一个空闲Entry的索引 。

    数据讲解

            Dictionary 由 _buckets、_entries、_freeList三个重要部分组成。

            _buckets 是一个 int 数组,内部存储的是 _entries 的索引值,Dictionary 通过 key 的哈希码计算获得 _entries 的索引值,从而获取 Entry 对象。

            _entries 是一个 Entry 类型的数组,Entry 内除了保存了相关的对象数据,还通过next变量,维护了一条数据链。通过next可以快速的查找到对象数据。

            _freeList 是一个整数变量,其保存的是 _entries 数组中空闲 Entry 对象的索引。所有空闲的Entry对象也是通过next变量进行链接起来的。

            下面通过一段 Dictionary 添加数据的示例代码,来讲解一下_buckets、_entries、_freeList是如何协作的,示例代码如下:

    // 获取key的哈希码
    uint hashCode = key.GetHashCode()
    // 计算获取_buckets索引
    int bucketIndex = hashCode % _buckets.Length
    // 获取bucket值
    ref int bucket = _buckets[bucketIndex]
    // 获取空闲的Entry对象,并设置数据
    Entry entry = _entries[_freeList]
    entry.hashCode = hashCode;
    entry.next = bucket - 1; // Value in _buckets is 1-based
    entry.key = key;
    entry.value = value;
    // 更新_buckets中的值,并指向对应Entry对象
    bucket = _freeList
    // 更新_freeList
    _freeList = StartOfFreeList - entries[_freeList].next;
    • 第一步,先用 key 哈希计算后获得 hashCode。
    • 第二步,用 hashCode 取余 _buckets.Length 获得 bucketIndex。这里取余 _buckets.Length 是为了将 hashCode 映射到 _buckets 数组内。
    • 第三步,通过 _buckets[bucketIndex] 获得 bucket 值,通过bucket 值获取 _entries 数组中的Entry 对象。
    • 最后则是更新 bucket 值和 _freeList 值。

            下面给出示例数据来讲解一下。

    // 假设 hashCode1 值获取为 123
    uint  hashCode1 = key1.GetHashCode()
    // bucketIndex1 值为 0
    int bucketIndex1 = hashCode % _buckets.Length// 假设 hashCode2 值获取为 456
    uint  hashCode2 = key2.GetHashCode()
    // bucketIndex2 值为 0
    int bucketIndex2 = hashCode % _buckets.Length_buckets = [4, -1, -1]  // 长度为3的桶数组
    _entries = [[hashCode=456, next=-1, key="a",  value=1],  	// 0 - 使用中[hashCode=-1,  next=3,  key=null, value=null],  // 1 - 已删除[hashCode=-1,  next=1,  key=null, value=null],  // 2 - 已删除(当前_freeList)[hashCode=-1,  next=-1, key=null, value=null],  // 3 - 已删除[hashCode=123, next=0,  key="b",  value=2]   	// 4 - 使用中
    ]
    _freeList = 2

            假设通过 key1 获取到的 hashCode 为123,通过取余获取到bucketIndex为0,由_buckets[0]可以获取到_entries[4]中的Entry对象,通过比对hashCode 查找的对象为_entries[4]。

            同样,key2获取到hashCode为456,同样取余获取到bucketIndex为0,由_buckets[0]获取到_entries[4]中的对象,由于hashCode不同,则需要继续通过next查找下一个Entry对象,通过查找_entries[0]对象,比对hashCode,key2查找的对象为_entries[0]。

            查找空闲中的Entry对象则需要用到_freeList,此时_freeList=2,获取空闲Entry对象时会先获取_entries[2]对象,通过next变量获取下一个对象,当next为-1时则为结尾。

    相关文档链接

    Dictionary类官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.generic.dictionary-2?view=net-9.0

    Dictionary源码地址:https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dictionary.cs

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

    相关文章:

  • 搭建专业网站服务器雅思培训机构哪家好机构排名
  • 长沙有哪些正规传媒公司重庆seo海洋qq
  • 才艺多网站建设公司web网站模板
  • 给政府机关做网站的网络网站
  • 深圳市住房和建设局网站公示chatgpt网页
  • 易居做网站百度百科推广联系方式
  • 建设厅网站怎么查询安全员c考试成绩网络营销课程感悟
  • 金泉网做网站推广抖音十大搜索关键词
  • 贵州建设厅网站厅长房地产最新消息
  • 天津百度推广排名优化搜索引擎优化的定义是什么
  • 建网站带app多少投资百度推广多少钱
  • 漳州微信网站建设如何搭建企业网站
  • 重庆网站设计公司推荐百度有人工客服吗
  • 云南建网科技有限公司太原整站优化排名外包
  • 柳市做网站的公司湘潭seo优化
  • win10做网站服务器友链购买网
  • 网站根目录在哪wordpressseo薪酬水平
  • 浏览有关小城镇建设的网站记录成功营销案例分享
  • 大连做网站优化公司优化设计五年级上册语文答案
  • 360做网站经常打骚扰电话西昌seo快速排名
  • 手机网站无法访问的解决方法灰色产业推广引流渠道
  • jn建站系统网络平台推广方式
  • Excel怎么做网站链接宁波网站seo诊断工具
  • 网站怎样才有流量关键词优化的方法有哪些
  • wordpress css美化深圳百度搜索排名优化
  • 给女友惊喜做网站惠州网络营销
  • 网站备案信息网站首页推广
  • 自己做网站系统首选平台国际新闻稿件
  • 电子商城网站源码网址检测
  • 曲靖房地产网站开发班级优化大师手机版下载(免费)