基本原理和用途
BitSet即位圖,是一個(gè)很長(zhǎng)的“0/1”序列,他的功能就是存儲(chǔ)0或者1。
他的這個(gè)特點(diǎn)使得在java環(huán)境中存儲(chǔ)一個(gè)數(shù)要比直接存一個(gè)int節(jié)省很多內(nèi)存空間(一個(gè)int占4個(gè)字節(jié)32位,而用BItSet“存放”一個(gè)數(shù)只需要1個(gè)位)。
比如我們有{1,3,5,7}需要存放,內(nèi)存中占用了4個(gè)int的長(zhǎng)度即32*4(bit),如果使用BitSet,就是這個(gè)樣的[...,1,0,1,0,1,0,1],只需要占用幾個(gè)bit就可以表示。1個(gè)G的內(nèi)存有8 * 1024 * 1024 * 1024 = 8.58 * 10^9個(gè)bit,也就是可以存放85億+個(gè)數(shù)。
BitSet的初始大小為1個(gè)long的大小,即8字節(jié)64個(gè)bit。如果我們創(chuàng)建的BitSet指定了位數(shù),系統(tǒng)會(huì)根據(jù)情況取成64的整數(shù)倍個(gè)bit,即整數(shù)個(gè)long的位數(shù),這樣做是為了內(nèi)存補(bǔ)齊。
BitSet適合用于無(wú)重復(fù),整數(shù),常用于大數(shù)據(jù)場(chǎng)景或者日志統(tǒng)計(jì)。
參考文章:
Java中BitSet的使用及詳解