2012-12-27 66 views
0

BitSet的set()函數被設置(int param)。我試圖通過發送一個long類型來實現Bitset函數。那裏有API或者教程嗎?謝謝。實現參數很長的Bitset函數

BitSet mobiphoneUsers = new BitSet(); 

bitset.set(12311111111111111111L); 

if(bitset.get(1231111111111111111L)) { 
    System.out.println("1231111111111111L is mobiphone user"); 
} 
+0

你是什麼意思'實現'位集功能? – Michael

+0

這可能不是你想要的,因爲'BitSet'的'set()'方法會將給定偏移量的位設置爲值1(並且它的參數是一個'int',所以你的'123L'會變成downcast到'int'。小心解釋一下你想做什麼? – fge

+0

BitSet API是開源的,它不包含像set(long)這樣的方法,所以你想做什麼? – Juvanis

回答

4

如果您正在使用超過2個十億比特創建BitSet,我猜,只有那些項目的一小部分被設置。對於像這樣設置的「稀疏」位,最好使用HashSet<Long>

HashSet<Long> bitset = new HashSet<Long>(); 

bitset.add(12311111111111111111L); 

if(bitset.contains(1231111111111111111L)) { 
    System.out.println("1231111111111111L is mobiphone user"); 
} 
+0

由於Bitset節省空間,我使用它。如果t他參數類型很長,哪種方式更好? HashSet或自定義Bitset? @Russell Zahniser – Felix

+0

@Felix:如果您有一個大小爲2,000,000,000的「BitSet」中設置了1000位,則使用250,000,000字節。具有相同值的'HashSet'可能會使用大約16,000字節。基本上,如果小於5%的可能值被設置,那麼你有一個「稀疏」設置,並且散列實現將會更高效地存儲內存。 –

+1

@Felix:節省空間?你看到一個'BitSet'在哪裏可以節省空間?對於其中的大多數,「BitSet」對象本身的開銷超過其工作內容。除非你真的需要:不要擔心Java中的「節省空間」:更多的時候,它會比你自己做的更好。 – fge