1、优点是删除记录方便,直接处理数组对应的子数组。平均搜索速度快。如有冲突,只需查询子数组即可。
2、缺点是使用指针导致查询速度慢,内存占用率高,不适合序列化。
开放式寻址法的优缺点与链表法相反。由于Python的一切都是基于Dict的,需要序列化,因此选择了开放式寻址法。
实例
#keys函数 #!/usr/bin/envpython #coding=utf-8 classDict: def__init__(self,num): self.__solts__=[] self.num=num for_inrange(num): self.__solts__.append([]) defhash_fun(self,key,num): hashval=0 x=key ifx<0: print"thekeyislow" return whilex!=0: hashval=(hashval<<3)+x%10 x/=10 returnhashval%num defput(self,key,value): i=self.hash_fun(key,self.num)%self.num forp,(k,v)inenumerate(self.__solts__[i]): ifk==key: break else: self.__solts__[i].append((key,value)) return self.__solts__[i][p]=(key,value) defget(self,key): i=self.hash_fun(key,self.num)%self.num fork,vinself.__solts__[i]: ifk==key: returnv raiseKeyError(key) #keys函数 defkeys(self): ret=[] forsoltinself.__solts__: fork,_insolt: ret.append(k) returnret def__getitem__(self,key): returnself.get(key) def__setitem__(self,key,data): self.put(key,data) H=Dict(13) H[54]="cat" H[26]="dog" H[93]="lion" H[17]="tiger" H[77]="bird" H[31]="cow" H[44]="goat" H[55]="pig" H[20]="chicken" printH.get(54) H.put(13,"duck") printH.__solts__ printH.keys()
以上是python链表法的优缺点,希望对大家有所帮助。更多Python学习指南:python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。