zoukankan      html  css  js  c++  java
  • HashTable

    Hash是各种数据结构中最为重要的数据结构之一

    Hash具有O(1)的数据检索效率

    Hash的空间开销却通常很大 以空间换时间

    适用于读取操作频繁,写入操作很少的操作类型

    存储结构:

    以数据的方式保存期,数组的大小不一为素数.

    当数组中存在的数据项个数大于数组容量的扩张因子倍数时,数组进行扩张

    。NET优化认为0.72最为合适, 所有数据将会被复制。

    hash算法:

    h(key,n) = h1(key) + n*h2(key)

    key为要hash的关键字,N为由于发生冲突而需要重新hash的次数

    h1(key)=”具体对象的hashCode数值”

    h2(key)=1 +(((h1(key)>>5)+1)%(hashsize -1)); hashsize为保存hash数据的桶数组的大小

    插入算法:

    计算seed值和遇到冲突时的hash值增量步长

    根据hash值计算应放入的桶的位置

    如果当前桶位置为空: 直接插入数据,当前桶位置冲突位被置位,记录当前位置,继续向后扫描是否有重复的KEY插入

    如果当前桶位置已经存在数据

      将当前冲突位设置为1,hash值增加增量,重新判断hash桶是否可用。

    通过key读取value算法

    计算seed值和遇到冲突时的hash值增量步长,获取当前hash桶的快照,

    根据HASH值获取第一个可能的桶,注意这里采用lockfree类似的方法保证访问同步

    如果找到相等的KEY返回结构,否则HASHCODE+=增量步长,重新查找。

    每个元素都存储在DictionaryEntry对象中的键/值对。

    foreach(DictionaryEntry myDE in myHashtable){…}

    foreach是对枚举数的包装,只允许从集合读取,不允许写入集合。

    hashtable是线程安全的,可由多个读取器线程。

    Hashtable公共属性:

    Count            Hashtable键值对的数目

    IsFixedSize     指示Hashtable是否具有固定大小

    IsReadOnly     指示是否只读

    IsSynchronized 是否同步对hashtable访问

    Item              获取或设置与指定的键相关联的值

    Keys              获取包含Hashtable中的键的ICollection

    Values            获取包含Hashtable中的值的ICollection

    受保护的属性:comparer, enqualityComparer, hcp

    公共方法:

    add, clear,clone, contains, containsKey, ContainsValue, CopyTo, Equals, GetEnumerator, GetHashCode, GetObjectData, GetType, Remove, ToString

  • 相关阅读:
    下载的谷歌浏览器打不开设置等 报崩溃 新版谷歌crx插件不让拖拽安装问题 cnpm安装问题
    webpack相关面试题
    京东改版提高的性能方面
    对于程序员来说拿到需求之后的那些事(项目管理、需求预估工期等等)
    前端迈向全栈的知识储备路程
    最近的Taro小程序和JD小程序以及原生小程序对比优势
    【转】vmware安装ubuntu详细步骤
    解决主机telnet vmware(ubuntu)不通的问题
    Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB
    一些协议的链接
  • 原文地址:https://www.cnblogs.com/chenqingwei/p/1584325.html
Copyright © 2011-2022 走看看