您的位置:首页 > 其它

布隆过滤器

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;
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: