哈希表:
key-value的存储结构,把值放在数组中,用一个哈希函数把key换算成确定的位置,然后把value放在数组的这个位置,不可避免多个key值经过哈希算法后出现同一个值的情况,处理这种情况的一种方式就是,拉出一个链表。
数组空间越小,哈希表值重复的概率就越大,对单链表的线性查找频率就越高。反过来,如果数组空间过来,又会出现很多闲置的空间,所以合理合计数组的大小很重要。
但是注意,哈希函数算法的特性导致存储的value是无序的,所以用哈希表的数据结构用作索引的情况下,做区间查询是非常慢的。所以哈希表哈希索引适用于等值查询的情况,比如Memcached及其他一些NoSql引擎。
https://baijiahao.baidu.com/s?id=1671247611862752442&wfr=spider&for=pc
有序数组:
以身份证为例,将数据按照身份证号的大小,有序存储。查找的时候,只需要二分查找就可以定位到数据。时间复杂度是log(N)。//2的x次方等于N。比如N=8。那二分查找的时间复杂度就是3,N=16,就是4以此类推。
有序数组在等值查找和区间查找都很优秀,但是却有一个致命问题,当有序找到需要插入数据的位置时,需要挪动这个数据后面所有的数据,所以有序数组只适合用静态数据的引擎。比如2017商城订单的信息,这种不会再改变的数据信息。
搜索树:
我们可以由浅入深先理解下二叉搜索树。二叉搜索树的特点是,左边子节点小于父节点,父节点又小于右边子节点。查找的时间复杂度为log(N),为了保持这颗树为平衡二叉树,更新的时间复杂度也是log(N)。
标签:数组,读写,哈希,查找,搜索,有序,数据结构,复杂度 From: https://www.cnblogs.com/songcuiting/p/16661398.html