我有一百萬左右的國旗真/假記住存儲陣列。 BitSet應該有幫助嗎?
您可以在BitSet中擁有數十億位。
儘管它實現了一個Set,它是否可以迭代它的元素,就像它是一個數組boolean []一樣快?
boolean []每位使用一個字節(在大多數JVM上),而BitSet每位使用一位。對於小型數組,布爾型[]更快,但是當您測試CPU高速緩存的大小時,BitSet可以更高效。
順便說一句:使用BitSet對於小尺寸稍微慢一些,因爲它需要從每個內存字中提取出一點。 A byte[]
有同樣的問題,所以如果你想自己設置位,我建議你使用像BitSet那樣的int[]
。
使用的BitSet
BitSet bitSet = new BitSet();
// set bit 100
bitSet.set(100);
// get bit 99
System.out.println("bit 99 is " + bitSet.get(99));
System.out.println("bit 100 is " + bitSet.get(100) + " after set");
bitSet.clear(100);
System.out.println("bit 100 is " + bitSet.get(100) + " after clear");
打印
bit 99 is false
bit 100 is true after set
bit 100 is false after clear
在典型情況下,您是否有多少設置爲true的想法?如果標誌幾乎總是假,一個簡單的'HashSet'或者'TreeSet'將比'BitSet'或'boolean []'少得多的內存。 –