谷歌Guava工具類的使用(1):BloomFilter的使用


具體代碼實現如下所示:

// 創建布隆過濾器,設置存儲的數據類型,預期數據量,誤判率 (必須大於0,小於1)
int insertions = 10000000;
double fpp = 0.0001;
BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), insertions, fpp);

// 隨機生成數據,並添加到布隆過濾器中(將預期數據量全部塞滿)
// 同時也創建一個List集合,將布隆過濾器中預期數據的十分之一存儲到該List中
List<String> lists_1 = new ArrayList<String>();
for (int i = 0; i < insertions; i++) {
    String uid = UUID.randomUUID().toString();
    bloomFilter.put(uid);
    if (i < insertions / 10) {
        lists_1.add(uid);
    }
}

// 再創建一個List集合,用來存儲另外 五分之一 不存在布隆過濾器中的數據
List<String> lists_2 = new ArrayList<String>();
for (int i = 0; i < insertions / 5; i++) {
    String uid = UUID.randomUUID().toString();
    lists_2.add(uid);
}

// 對已存在布隆過濾器中的lists_1中的數據進行判斷,看是否在布隆過濾器中
int result_1 = 0;
for (String s : lists_1) {
    if (bloomFilter.mightContain(s)) result_1++;
}
System.out.println("在 <已存在> 布隆過濾器中的" + lists_1.size() + "條數據中,布隆過濾器認為存在的數量為:" + result_1);

// 對不存在布隆過濾器中的lists_2中的數據進行判斷,看是否在布隆過濾器中
int result_2 = 0;
for (String s : lists_2) {
    if (bloomFilter.mightContain(s)) result_2++;
}
System.out.println("在 <不存在> 布隆過濾器中的" + lists_2.size() + "條數據中,布隆過濾器認為存在的數量為:" + result_2);

// 對數據進行整除,求出百分率
NumberFormat percentFormat = NumberFormat.getPercentInstance();
percentFormat.setMaximumFractionDigits(2);
float percent = (float) result_1 / lists_1.size();
float bingo = (float) result_2 / lists_2.size();
System.out.println("命中率為:" + percentFormat.format(percent) + ",誤判率為:" + percentFormat.format(bingo));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM