hashtable的key不同时,是否会算出相同的哈希码?

解决方案 »

  1.   

    hashtable的key不同时,会算出相同的哈希码,但是这不会影响hashtable的正常功能,极端情况下(例如出现大量hash值碰撞时),最多使效率变差
      

  2.   

    Hashtable的Key是绝对可能相同的...Hashtable中的每个键对象必须提供其自己的哈希函数...如果键相等性只是引用相等性,则默认的Object.GetHashCode和Object.Equals的继承实现将满足需要...但是...GetHashCode方法的默认实现不保证针对不同的对象返回唯一值。而且.NET Framework不保证GetHashCode方法的默认实现以及它所返回的值在不同版本的.NET Framework中是相同的。因此,在进行哈希运算时,该方法的默认实现不得用作唯一对象标识符。值类型必须重写此方法,以提供适合该类型的哈希函数和在哈希表中提供有用的分布。默认实现尚且不保证针对不同的对象返回唯一值...假如你重写GetHashCode方法时不幸使用了错误的算法那么更无法保证...当然这个碰撞的几率是极低的...一般不会发生,因为可能这种碰撞发生之前你的Hashtable的容量已经大到无法运行了...但这也不是绝对的保证...所以在你重写Hashtable的Value对象的GetHashCode方法时必须小心...
      

  3.   

    拉链法解决冲突的方法
         拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于 1,但一般均取α≤1。上面就是微软才用的解决冲突的方式.
    查找的时候会遍历该位置的链表(一般都只有一项).