github上java_GitHub上Java的Bloom Bloom实现

github上java

布隆过滤器是集数据结构的一种 。 对于那些不了解的对象,“设置数据结构”仅包含一个主要方法。 它仅用于确定特定元素是否包含在一组元素中。 大多数数据结构(例如Hash Map , Linked List或Array )都可以相当容易地创建此功能。 您只需要在数据结构中搜索特定元素。

但是,当集合中的元素数量超过可用内存量时,这些类型的数据结构可能会带来问题,因为这些类型的数据结构会将所有元素存储在内存中。

这是布隆过滤器变得有趣的地方。 因为布隆过滤器实际上并未将集合中的所有元素存储在内存中。

布隆过滤器没有将每个元素放入数据结构中,而是仅存储字节数组。 对于添加到布隆过滤器的每个元素,在其数组中设置k位。 这些位通常由哈希函数确定。

要检查元素是否在集合中,只需检查通常对于该项目而言通常为1的位实际上是否为1。 如果它们都是一(而不是零),则该项在集合内。 如果任何一位都不为1,则该项目不在集合内。

对于每个数据结构,肯定都有向布隆过滤器退缩的缺点。 通过使用上述方法,布隆过滤器可以说元素实际上不在集合中。 假阳性可能在集合中,并且取决于几个因素,例如:

  • 字节数组的大小
  • 每个元素设置的位数(k)
  • 集合中的项目数

通过调整上述值,您可以轻松地将误报概率提高到可观的水平,同时仍然节省大量空间。

发现布隆过滤器后,我开始寻找Java实现。 遗憾的是,不存在标准实现! 因此,我编写了一个简单快速的Java版Bloom Filter版本。 您可以在GitHub上找到源代码 。

我的实现使用:

  • MD5哈希
    • 要添加一个Object,该集合采用hashCode()方法的值来计算MD5哈希。
  • 由简单的字节数组支持
  • 实现Set <Object>接口,尽管该接口中的某些方法将无法正常工作。

请注意,该项目还使用SizeOf库来获取内存中使用的字节数。

我还做了一些快速到期操作,以将过滤器与Java中的标准ArrayList进行比较,并进行了一些性能检查。

  • 使用不同的k值将元素添加到集合中所需的时间
  • 集合大小与不同级别的数组列表

可以预期,集合中需要的元素数量越多,Bloom Filter变得越有用。 当确定布隆过滤器应该有多大以及给定集合的最佳k值是多少时,确实会有些棘手,尤其是在集合不断增长的情况下。

对于测试,我只是向每个数据结构添加了对象(大小为16个字节),然后使用SizeOf库获取使用的真实空间量。

从上图可以很容易地看出,一旦数组变得大于100个对象,Bloom Filter的大小效率就会大大提高。 这种趋势持续到1500个对象,而布隆过滤器需要比ArrayList少22808字节来存储相同数量的元素。

上图显示了以秒为单位的时间(在2012年早期的iMac上),将元素添加到具有不同位数(k)的列表中。 随着k的增加,时间会相当缓慢地增加到10位。 但是,任何超过10的东西都会变得非常昂贵,设置100位需要一整秒才能完成。

随时在GitHub上检查测试的源代码和Bloom Filter实现本身。

参考:来自我们的JCG合作伙伴 Isaac Taylor在Programming Mobile博客上的GitHub上的Java中Bloom过滤实现 。

翻译自: https://www.javacodegeeks.com/2012/11/bloom-filter-implementation-in-java-on-github.html

github上java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Error:The supplied javaHome seems to be invalid. I cannot find the java executable

设置一下gradle的JVM路径就好 转载于:https://www.cnblogs.com/shimu/p/10708888.html

Linux启动nacos成功日志_微服务系列之Nacos配置中心

Nacos 介绍Nacos 是 Alibaba 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置管理。英文全称 Dynamic Naming and Configuration Service&#xff0c;Na 为 Naming/NameServer 即注册中心&#xff0c;co 为 Configuration 即配置中心&#xff0c;Service 是…

ubuntu 常用快捷键、常用命令

ls 显示当前文件夹下文件 pwd 显示当前目录 history 显示以前命令 touch 创建文件 例子&#xff1a; touch 1.txt &#xff1b; touch1.py等等 mkdir 创建文件 例子&#xff1a;mkdir abc&#xff1b; mkdir abc/d; mkdir abc/123/a -p …

Apache Camel 2.19发布–新增功能

Apache Camel 2.19于2017年5月5日发布&#xff0c;大约在一段时间后&#xff0c;我做了一个小博客&#xff0c;介绍了该版本包含的值得注意的新功能和改进。 这是值得注意的新功能和改进的列表。 1. Spring Boot的改进 Camel 2.19版本已针对Spring Boot进行了许多改进。 例如…

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

两年半前写的关于Maven的介绍&#xff0c;现在看来都还是不错的&#xff0c;自己转下。写博客的一大好处就是方便自己以后查阅&#xff0c;自己总结的总是最靠谱的。 由浅入深&#xff0c;主要介绍maven的用途、核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)、…

C#枚举(Enum)小结

枚举概念 枚举类型&#xff08;也称为枚举&#xff09;提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。该类型使用enum关键字声明。 示例代码1 enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下枚举中每个元素的基本…

用js实现导航栏shoufang效果_【读者投稿】用Github+docsify,我花了半天就搭好了个人博客...

前言“作为一个真正的码农&#xff0c;不能没有自己的个人博客”&#xff0c;这是我说的。惭愧的是&#xff0c;入行两年多了都没搞起来&#xff0c;这让我一度怀疑自己是个假程序员。昨天终于克服了心里的“犹豫”和“恐惧”&#xff0c;尝试搭建了一把&#xff0c;半天就搞好…

ubuntu 重定向

重定向 &#xff08;重新设定方向&#xff09; ls > xxx.txt 将ls显示的内容写入到xxx.txt ls -lah > xxx.txt ls >> xxx.txt 将ls显示的内容以追加方式写入到xxx.txt

IDEA快捷键及xml文件中网址报错

AltShiftTab 切换窗口(从后往前) divTab    补全为 <div></div> #boxTab   补全为 <div id"box"></div> .boxTab   补全为 <div class"box"></div> …

python随机生成数字列表_详解Python利用random生成一个列表内的随机数

首先,需要导入random模块: import random 随机取1-33之间的1个随机数&#xff0c;可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到一个随机数: print(random.choice(range(1,34))) 随机取1-33之间的6个随机数&#xff0c;可能重复: random.choices(r…

构建Java Web开发环境

1.1 JDK&#xff08;Java Development Kit&#xff09;的安装与配置1.1.1 下载最新的JDK&#xff08;我下载的是Java SE 6 Update 25&#xff09;下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html1.1.2 JDK的安装1、双击名为“jdk-6u2…

ubuntu cd 改变路径

. 表示当前路径 cd &#xff0e;&#xff0e; 后退到上一层路径 cd ../.. 调到上上层路径,相对路径 cd /home/hjd/ 绝对路径 cd ~ 回到家目录 &#xff08;/home/hjd/&#xff09;

cloud foundry_Spring 3.1,Cloud Foundry和本地开发

cloud foundry这篇文章将帮助您在Cloud Foundry上使用MongoDB构建Spring 3.1 Web应用程序。 除了推动Cloud Foundry之外&#xff0c;您还可以使用MongoDB实例在本地环境中进行开发。 目标 此博客发布的目标是在本地构建应用程序&#xff0c;然后发布到本地Cloud Foundry实例。…

python中continue用法案例_Python continue语句实例用法

Python continue语句&#xff1a; 当执行到 continue 语句时&#xff0c;将不再执行本次循环中 continue 语句接下来的部分&#xff0c;而是继续下一次循环。 lst [7,8,9,4,5,6] for i in range(len(lst)): if lst[i] 9: continue #当运行到 continue 语句时&#xff0c;不执…

eclipse中查看某个方法(函数)被谁调用

用了好久一直不知道eclipse中如何实现vs中查找所有引用的功能&#xff0c;今天终于发现了哈哈 选中要查找的方法名&#xff0c;右键->References->Workspace 可以定位到具体的调用位置&#xff0c;快捷键CtrlShiftG&#xff0c;在Search中就会出现调用方法 或者是 右键-&…

ubuntu ln软连接硬连接

软连接:相当于windows的快捷方式 硬连接&#xff1a;又创建了一个名字指向同一个内存区&#xff0c;相当于又复制了一个同样的内容 ln -s 1.txt 2.txt 将文件1.txt建立2.txt软连接 相当于快捷方式 ln 1.txt 3.txt 将文件1.txt建立3.txt硬连接,

一个简单的Map Iterator性能测试

Java Map性能有很多方面可以衡量&#xff0c;但是关键的一个是简单的单线程扫描。 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码&#xff0c;以及一些图形结果。 1.性能测试困难 性能测试是一项非常困难的工作&#xff0c;精确的可重复测试需要Java微基准测试线束…

小数点后保留2位小数的正则表达式

一、前提 整数和小数&#xff0c;保留两位小数的正则表达式&#xff1a; 具体什么意思呢  ^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$ 二、知识点 1、首先从写法上可以看出&#xff0c;使用了显式定义正则表达式的语法&#xff0c;因为其中存在对字符串"\"&…

python字符串是什么_python字符串表示什么

python的字符串就是表示一串字符&#xff0c;字符可以是中文&#xff0c;英文或者数字&#xff0c;或者混合的文本。 python字符串的几种表达方式 1 使用单引号扩起来字符串>>> my python lession #以单引号将字符串扩起来 my python lession >>> a my pyth…

PgSql备份pg_dump与还原手记pg_restore(转)

备份&#xff1a;pg_dump -h localhost -p 5432 -U tradesns -W -F c -b -v -f "/home/tradeworkwangbin/us2010.backup" us2010 恢复&#xff1a;pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup" 真没有想到&…