【1】 hashtable如何避免地址冲突
(1) 线性测探:先用hash function 计算某个元素的插入位置,如果该空间的位置已经被占用,则继续往下找,直到找到一个可用地址为止。其删除采用随机删除只标记删除记号,实际操作等表格整理好在进行
(2) 二次探测:如果计算出的位置为H,并且已经被占用了,则一次尝试H+1*1,H+2*2等(解决线性冲突住集团问题)
(3) 开链:每一个表格元素中维持一个list,hash function为我们分配一个list 然后在那个list执行插入删除操作
【2】 Hashtable,hash_set,hash_map的区别
(1) Hash_set 以hashtable为底层结构,不具有排序功能,能快速查找,其键值就是实值(set的底层结构是以红黑树,具有排序功能)
(2) Hash_map以hashtable为底层结构,不具有排序功能,能快速查找,每个元素同时拥有一个实值和键值(map的底层结构是以红黑树,具有排序功能)
【3】 Hash_map与map的区别,什么时候用map,什么时候用hash_map
(1) 构造函数:hash_map需要hash function等函数,而map需要比较函数
(2) 存储结构:Hash_map以hashtable为底层结构,map的底层结构是以红黑树
(3) hash_map的查找速度比map快而查找的速度基本与数据量的大小无关,属于常数级别,而map的查找速度属于log级别,但不一定常数比log小,而且hash_map还有hash function的耗时,如果考虑效率,特别当元素达到一定量级的数量时用hash_map,考虑内存的时候或者元素数量较小的时候,用map
【4】 hash_map与hashtable的区别
(1) hashtable是dictionary的子类,而hash_map是map接口的一个实现类
(2) hashtable中的方法是同步的,hash_map中的方法是不同步的