什么是哈希表哈希表(Hashtable),又称哈希表,是指一种根据键码值直接访问的数据结构(即KeyValue结构)。即通过映射函数(f(key))将每个keycode值映射到哈希表中的一个位置,通过keycode值访问数据,加快查找速度(即O(n)).这种映射函数称为哈希函数,存储记录的数组称为哈希表。给定一个表M,有一个函数f(key)。对于任意给定的键值键,如果代入函数后可以得到包含该键的表中记录的地址,则表M称为一个散列(Hash)。表中,函数f(key)是一个散列(Hash)函数。什么是哈希冲突?对于不同的关键字,有可能得到相同的哈希地址,即f(key1)=f(key2)且key1≠key2。这种情况称为哈希冲突,也称为哈希冲突。减少hash冲突Java的HashMap使用了取模算法,也可以考虑使用offset来减少hash冲突。如何处理哈希冲突?哈希冲突是不可避免的。在Java的HashMap中,hash冲突是通过链表的形式来处理的,也可以多次hash直到不冲突为止,或者创建一个公共区域存放冲突的key,或者使用openaddresses寻找相邻方向未使用的存储地址。该数据结构主要是解决无序数据的查询效率问题,但是由于引入了链表来解决hash冲突,极端情况下查询会很慢,因为链表的查询时间复杂度为O(n),所以在Java的HashMap中引入了红黑树来平衡查询效率。当然,链表和红黑树之间的转换也有性能开销,所以对转换条件有一定的限制。默认情况下,hashMap的长度达到64,只有链表长度大于8时才会进行红黑树转换。
