在項目中用到bitset,其做用是把名單中的userid映射到bitset中,當uid請求時先從bitset中查找有木有,沒有直接返回,有記錄,則到db中去查具體的類型;這樣能夠優化系統查詢算法
用戶id:1-6000w數組
bitset的底層須要有 6000w個位bit,數據結構
大概 6000w/8 = 750w 字節BYTE = 750w/1024/1024 =7.2M優化
引用:BitSet的實現原理ui
一、BitSet介紹 spa
Bitset是Java中的一種數據結構。Bitset中主要存儲的是二進制位,作的也都是位運算,每一位只用來存儲0,1值,主要用於對數據的標記。 .net
Bitset的基本原理是,用1位來表示一個數據是否出現過,0爲沒有出現過,1表示出現過。使用的時候能夠根據某一個位是否爲0表示此數是否出現過。JDK中的BitSet集合對是布隆過濾器中常用的數據結構Bitmap的相對簡單的實現。BitSet採用了Bitmap的算法思想。
使用場景:整數,無重複。
日誌
二、BitSet的底層實現是使用long數組做爲內部存儲結構的,這就決定了BitSet至少爲一個long的大小,並且BitSet的大小爲long類型大小(64位)的整數倍。 blog
long數組的每個元素均可以當作是64位的二進制數,也是整個BitSet的子集。在BitSet中把這些子集叫作[Word]。
三、BitSet常見的應用場景是對海量數據的處理,能夠用於對大數量的查找,去重,排序等工做,相比使用其餘的方法,佔用更少的空間,顯著提升效率;也能夠使用BitSet進行一些統計工做,好比日誌分析、用戶數統計等;還能夠使用其方法作一些集合方面的運算,好比求並集、交集和補集等。
排序