BitSet 簡單說明
在內存中是一串連續的內存空間,從0開始的正整數
按位操作,每一位的值只有兩種 0 或者 1,來表示某個值是否出現過。
2:簡單使用
把 1 3 5 三個數放bitSet中
BitSet bitSet=new BitSet();
bitSet.set(1);
bitSet.set(3);
bitSet.set(5);
這時候bitSet的長度是 最大數+1=5+1=6
for(int i=0;i<bitSet1.length();i=i+1) {
System.out.print(bitSet1.get(i)+"-");
}
得到的結果
false-true-false-true-false-true
0 1 2 3 4 5
從結果可以看到,為true 說明這個位置上的數是存在的,默認每個位上為0,也就是false。
3:簡單應用
某品牌下有100個會員,會員的id,按入會先后 從1-100,
會員標簽:性別-女,偏愛顏色-白色,職業-程序員
每個標簽對應一個bitSet,每個bitSet中存儲該標簽對應的會員id
性別-女標簽下的會員有:2 66 88 90 32 bitSet1
偏愛顏色-白色的會員有:66 89 55 22 bitSet2
職業-程序員的會員有:88 99 90 22 bitSet3
程序設計:
(1) 從數據中查出性別為女的會員對應的id
(2) 把id放入 bitSet.set(id);
其他標簽依次放入 不同的bitSet
操作
(1) 查詢喜歡白色的女會員 兩個bitSet1.and(bitSet2),再輸出bitSet1,則得到66
(2) 查詢女會員和職業為程序員的會員 bitSet1.or(bitSet3),再輸出bitSet1,則得到2,22,32,66,88,90,99,合並兩個集合,並自動去重。
4:BitSet值持久化
把bitSet中二進制數,轉化為十進制保存到數據庫中,這樣方便在其他的統計中使用。
二進制過長的話,要使用BigInteger來轉換。
說明:若有10W個會員,二進制轉換為十進制大概需要18秒;100W 要30分鍾
會員超過10W的話 這種持久話就不太適合了,還沒有找到好辦法,繼續探索。