布隆过滤器
2015-06-03 09:52
357 查看
package com.dhlyf.data; import java.util.BitSet; public class UrlFilter{ private static final int DEFAULT_SIZE = 2 << 24; private static final int[] seeds = new int[]{7,11,13,31,37,61,}; private BitSet bits = new BitSet(DEFAULT_SIZE); private SimpleHash[] func = new SimpleHash[seeds.length]; public UrlFilter(){ for(int i=0; i<seeds.length; i++){ func[i] = new SimpleHash(DEFAULT_SIZE, seeds[i]); } } public void add(Url value){ if(value != null){ add(value.getOriUrl()); } } public void add(String value){ if(value != null){ for(SimpleHash f : func){ bits.set(f.hash(value),true); } } } public boolean contains(Url value){ return contains(value.getOriUrl()); } public boolean contains(String value){ if(value == null){ return false; } boolean ret = true; for(SimpleHash f : func){ ret = ret && bits.get(f.hash(value)); } return ret; } class SimpleHash{ private int cap; private int seed; public SimpleHash(int cap,int seed){ this.cap = cap; this.seed = seed; } public int hash(String value){ int result = 0; int len = value.length(); for(int i = 0; i<len; i++){ result = seed * result + value.charAt(i); } return (cap-1) & result; } } }
相关文章推荐
- android常用的命令
- MySQL读取数据到php二维数组
- [转]Python文件操作
- NEC学习 ---- 模块 - 左图右文图文列表
- 远程数据库迁移数据
- 好看实用的菜单插件。
- 邮件流走向查询
- 每日一支TED——弗兰斯·兰庭:为动物发声的摄影作品——2015年6月3日
- ps -ef|grep tomcat
- Android NFC基础开发教程
- C++语言学习之STL 的组成
- html5横、竖屏状态 以及禁止横屏
- 删除Openstack僵尸instances和projects
- 浅析SecondaryNameNode,CheckpointNode,BackupNode,HA,Federation
- Flume学习笔记
- 在STL中的functor(仿函数)的另一用处:当模板函数必须要进行偏特化时
- Java TreeSet的使用 (LeetCode Contains Duplicate III )
- android studio加载动态库
- iOS 内存管理笔记
- Android listview addHeaderView和addFooterView详解