首页 > 编程语言 >java-guava 布隆筛选器用法及比较

java-guava 布隆筛选器用法及比较

时间:2022-10-28 14:38:11浏览次数:42  
标签:java 漏报 布隆 System wrong key println guava out


java-guava 布隆筛选器用法及比较

布隆筛选器使用场景:
    一般用于一个字符串是否存的预测,如爬虫是否抓取过这个URL等。
优点:
    对于特大的集合来说,检索快、占用内存少等。
缺点:
    存在漏报率。   

 

分别使用 set、boolmfilter 检索一千万个数字,通过调整 fpp 值可以观察漏报率

public static void main (String[] args){
double fpp = 0.00001f; //精度,漏报率
//最大可存储 800w+ key,漏报率万分之1
BloomFilter<String> bloomFilter
= BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8),1024*1024*16,fpp);

long begin = System.currentTimeMillis();
int count=10000000;
int wrong = 0;
String key ="";
for(int i=0;i<count;i++){
key = String.valueOf(i);
if(bloomFilter.mightContain(key)){
wrong++;
System.out.println("key="+key);
}
bloomFilter.put(key);
}
long timeCost = System.currentTimeMillis() - begin;

System.out.println(MessageFormat.format(
"boolm,漏报:{0},count={1},耗时:{2}"
,wrong,count,timeCost));


System.out.println("xxx");


Set<String> bs = new HashSet<>();

wrong=0;
begin = System.currentTimeMillis();
for(int i=0;i<count;i++){
key = String.valueOf(i);
if(bs.contains(key)){
wrong++;
System.out.println("key="+key);
}
bloomFilter.put(key);
}
timeCost = System.currentTimeMillis() - begin;
System.out.println(MessageFormat.format(
"set,漏报:{0},count={1},耗时:{2}"
,wrong,count,timeCost));

System.out.println("xxx");
}

 

标签:java,漏报,布隆,System,wrong,key,println,guava,out
From: https://blog.51cto.com/u_4518216/5804845

相关文章

  • java springboot 2.x 环境搭建
    环境:javaversion1.8ApacheMaven3.2.2 ide:ideaspringboot:2.1.3.RELEASE创建步骤:1file=>new=>mudule...2选择SpringInitializr:modulesdk选择1.7,其他默认......
  • java-字符串拼接几种方法的性能比较
    java-字符串拼接几种方法的性能比较一、测试方法:String.format();MessageFormat.format();StringBuilder();二、测试结果:性能:StringBuilder>MessageFormat>String三......
  • 力扣907(java)-子数组的最小值之和(中等)
    题目:给定一个整数数组arr,找到min(b) 的总和,其中b的范围为arr的每个(连续)子数组。由于答案可能很大,因此返回答案模10^9+7。 示例1:输入:arr=[3,1,2,4]输......
  • java-floyd最短距离算法
    java-floyd最短距离算法publicstaticvoidmain(String[]args){MatrixDGmatrixDG=newMatrixDG();System.out.println("初始化邻接矩阵");matrixDG.print......
  • Java-五种线程池,四种拒绝策略,三类阻塞队列
    Java-五种线程池,四种拒绝策略,三类阻塞队列(常用)三类阻塞队列:   //1有界队列   workQueue=newArrayBlockingQueue<>(5);//基于数组的先进先出(FIFO)队列,支持公......
  • java-并发集合-阻塞队列 LinkedBlockingQueue 演示
    java-并发集合-阻塞队列LinkedBlockingQueue演示packageme.grass.demo.concuronte;importjava.util.Date;importjava.util.concurrent.CountDow......
  • java-并发集合-并发hash表 ConcurrentHashMap 演示
    java-并发集合-并发hash表 ConcurrentHashMap演示packageme.grass.demo.concurrent;importjava.util.Date;importjava.util.concurrent.Concurr......
  • java-并发集合-并发队列 ConcurrentLinkedQueue 演示
    java-并发集合-并发队列ConcurrentLinkedQueue演示目标:模拟5个线程同时并发读取“并发队列”,并使用CountDownLatch类协助计算消费耗时。pack......
  • 使用jvmti dll |so 加密java class jar包
    dll代码 //dllmain.cpp:定义DLL应用程序的入口点。#include"pch.h"#include<iostream>#include<jni_md.h>#include<jni.h>#include<jvmti.h>#include......
  • Java集合
    List和Set的区别:List:有序,按对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用Iterator取出所有元素,再逐一遍历,还可以使用get(intindex)获取指定下标的元素......