代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
布隆过滤器简单实现
作者:
youngmk
/ 发布于
2015/7/9
/
654
判断元素是否在某个集合中,原理和位图法相似,不存在漏判,只可能误判,常常用于检测某个元素是否是巨量数据集合中的成员
package com.seefly.bigdata.basestruct; import java.util.List; /* * 判断元素是否在某个集合中,原理和位图法相似,不存在漏判,只可能误判,常常用于检测某个元素是否是巨量数据集合中的成员 */ public class BloomFilter<E> { //存储存储hash后的值 private byte[] bitGraph; //hash函数的个数 private int hashNum; //位图的长度 private int length; //存放bloonHash private List<BloomHash> bloomHash; /* * 这里测试,初始值比较随便,生产环境中根据元素的数量,有相应的经验公式 */ public BloomFilter(){ length = 512; hashNum = 20; // 使用改进型bloom过滤器,每4位表示一个元素, 最多能表示2^8 -1 次hash命中 bitGraph = new byte[length]; bloomHash = BloomHashCreator.produce(hashNum, length); } public boolean isExist(E element) { return false; } public void insert(E element) { if (element != null){ for ( BloomHash bh: bloomHash) { int hash = bh.getBloomhash(); setHashBit(hash); } } } public void delete(E element){ if (element != null){ for ( BloomHash bh: bloomHash) { int hash = bh.getBloomhash(); clearHashBit(hash); } } } public void insert(List<E> element) { if (element != null) { for (E e : element) { this.insert(e); } } } private void setHashBit(int parm){ byte old = bitGraph[parm]; if(Byte.MAX_VALUE != old){ bitGraph[parm] = (byte) (old + 1); } } private void clearHashBit(int parm){ byte old = bitGraph[parm]; if(old > 0){ bitGraph[parm] = (byte) (old - 1); } } } package com.seefly.bigdata.basestruct; import java.util.Random; public class BloomHash { private int maxValue = 0 ; private int minValue = 0; public BloomHash(int start,int end){ this.maxValue = end; this.minValue = start; } public int getBloomhash(){ return new Random().nextInt(maxValue) + minValue + 1; } } package com.seefly.bigdata.basestruct; import java.util.ArrayList; import java.util.List; public class BloomHashCreator { private BloomHashCreator(){ } public static List<BloomHash> produce(int num,int maxValue){ List<BloomHash> ret = new ArrayList<BloomHash>(); int seg = maxValue/num; int flag = maxValue%num; if(flag == 0){ for(int i=0;i<num;i++){ ret.add(new BloomHash(i*seg,(i+1)*seg)); } }else{ for(int i =0;i<num-1;i++){ ret.add(new BloomHash(i*seg,(i+1)*seg)); } ret.add(new BloomHash((num-1)*seg,maxValue)); } return ret; } }
试试其它关键字
布隆过滤器
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
youngmk
贡献的其它代码
(
3
)
.
文件读写
.
布隆过滤器简单实现
.
input selec下拉框模糊查询
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3