本质上布隆过滤器是一种数据结构,比较巧妙的几率型数据结构(probabilistic data structure),特色是高效地插入和查询,能够用来告诉你 “某样东西必定不存在或者可能存在”。数组
相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,可是缺点是其返回的结果是几率性的,而不是确切的。缓存
与HashMap比较想象,不一样之处在于布隆过滤器是存储的Bit位数组,内容值只有1 与 0 很是显著的减小了存储大小。因此布隆过滤器只能判断是否匹配,而没法获取对应匹配值。网络
了解HashMap数据结构的同窗都应该知道HashMap会有几率发生碰撞,在发生碰撞时会生成链表或红黑树来解决,那布隆过滤器是如何解决这个问题的呢?数据结构
上图边表示分别存储A、B、C三个值,与下边数组的链接线分别表示不一样的Hash值地址。经过过一个写入的值计算多个Hash地址,这样就能够尽可能减小碰撞的可能,但绝对没法作到绝对不碰撞。code
只能经过增长计算Hash的条数或增长数组长度来减小碰撞可能。blog
根据上边了解到的信息,咱们知道因布隆过滤器是使用bit位数组存储的,若是支持删除操做的话,可能会影响其余值的匹配。那么咱们还有其余方式来使布隆过滤器支持删除吗?get
咱们能够改变一下数据结构,将数组改成计数形式就能够实现,用空间来换功能。同步
个人博客即将同步至腾讯云+社区,邀请你们一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1ro14ignkt5pb博客