前言
JSArray有两种模式,一种是快速的,底层原理使用数组存储,增删元素操作需要不断的扩容、减容和调整元素的位置,查找用的是索引直接定位;一种是慢速的,使用用哈希表;
什么是HashTable?
存储结构
- 数据结构可以归结为两类:连续的的存储结构和不联系的存储结构,其代表分别为数组和链表;
- 数组实现:堆栈,队列;
- 链表实现:树,图;
- 数组:连续的存储结构,在数据的查找和修改上具有很好的优点,很方便,时间复杂度很小。但是在数据的增添和删除上则显得很麻烦,空间复杂度很大。
- 链表:而非连续,非顺序的存储结构,和数组相反,数据的增添和删除容易,空间复杂度很小,查找和修改复杂,时间复杂度很大。
HashTable诞生原因
那么有没有一种数据结构能折衷一下数组和链表的优缺点呢?那就是——哈希表,既满足了数据的查找和修改很容易,同时又不占用很多空间的特点。
- 哈希表是基于哈希函数的,哈希表中的元素是有哈希函数确定的;
- 哈希表作为一种数据结构,我们用哈希表来存储数据,在保存的时候存入的是一个<key—value>的结构,value由哈希函数作用于key上得到;
- 哈希冲突:当你用hash函数作用在两个互不相同的key上,得到的value值相等。
HashTable组成
哈希表是由数组+链表构成的
hashTable应用
- 相似性搜索
-
- 文档相似性搜索的哈希函数:Simhash
-
- 图片相似性搜索的哈希函数是感知哈希(Perceptual Hashing)
-