哈希表
哈希表
关联数组(Associative Array),映射(Map),特征表(Symbol Table),字典( Dictionary)
可作为哈希的对象是不能改变的,string,int,float,tuple,object
set,dict,list可以改变不能作为key,想将list放入哈希表,可写成一个class,或转成tuple
操作:增删改查
解决冲突:
一、开放性地址。(open address)
1、线性(Linear Probing)
当产生冲突时放到下一个位置,此时所有操作(查找,修改,删除)可能会变成O(N)
需设置标识位,其中某个数删除后,设置标识位,表示此处曾有数。
缺陷:1、复杂度变为O(N) 2、主要交通堵塞(primary clustering),当产生大量冲突,之后另一个hashcode过来时,位置可能被占用,仍然堵塞。
2、平方(Quadratic Probing)
当产生冲突时放到12,22,32......位置,可解决主要交通堵塞,但有second clustering(远小于primary clustering)
二、链表(separate chain)
产生冲突时,设置链表放在后面。
缺陷:1、复杂度也可能变为O(N)
注:python中为开放性地址,java中为separate chain
三、再哈希
python 中当空间占到2/3时,会扩充*2,index就需要在计算(rehash)
四、equal
当使用Object作为key时,需要编写equal方法,判断查找到的是否是该对象