BitMap的原理和實現

2021-10-09 17:42:44 字數 1662 閱讀 2707

32位機器上,對於乙個整型數,比如int a=1,int佔4位元組,1位元組=8位(1 byte = 8 bit),佔32bit位。

如果每個數字用int儲存,那就是20億個int,因而占用的空間約為 : (2000000000*4/1024/1024/1024)≈7.45g

如果按位儲存就不一樣了,20億個數就是20億位,占用空間約為 :(2000000000/8/1024/1024/1024)≈0.233g

bitmap使用1bit表示乙個關鍵字的狀態(可表示兩種狀態),但根據需要也可以使用2bit(表示4種狀態,如設定1個數字不存在為00,存在一次為01,存在兩次及其以上為11),3bit(表示8種狀態)。

bitmap主要用於大量資料的排序、查詢以及去重,快速檢索關鍵字狀態,通常要求關鍵字是乙個連續的序列(或者關鍵字是乙個連續序列中的大部分)。

public class mybitmap 

/*** 定位bitmap某一位對應的word

* @param bitindex 點陣圖的第bitindex位

* @return

*/private int getwordindex(int bitindex)

/*** 把bitmap某一位設定為1

* @param bitindex 點陣圖的第bitindex位

*/private void setbit(int bitindex)

//1>定位到words中對應的long元素

int wordindex = getwordindex(bitindex);

//2>位或|(有1個為1則為1,否則為0):該元素對應的二進位制位設為1

words[wordindex] |= (1l << bitindex);

}/**

* 判斷bitmap某一位的狀態

* @param bitindex 點陣圖的第bitindex位

*/private boolean getbit(int bitindex)

//1>定位到words中對應的long元素

int wordindex = getwordindex(bitindex);

//2>位與&(都為1才為1,否則為0):判斷該元素對應的二進位制位是否為1

return (words[wordindex] & (1l << bitindex)) != 0;

}/**

* 把bitmap某一位設定為0

* @param bitindex 點陣圖的第bitindex位

*/private void clearbit(int bitindex)

//1>定位到words中對應的long元素

int wordindex = getwordindex(bitindex);

//2>異或^(相同位得0,不同位得1):該元素對應的二進位制位設為0

words[wordindex] ^= (1l << bitindex);

}public static void main(string args) ;

mybitmap mybitmap = new mybitmap(12);

for (int i : array)

for (int i = 0; i < mybitmap.size; i++)}}

}

bitmap原理和實現

我們知道乙個1g 1024m,1m 1024k,1k 1024byte,1byte 8bit,所以1個位元組等於8bit,也就是8個二進位制位,位圖法的概念是用乙個位 bit 來標記某個數的存放狀態,所以節省了大量的空間。以二進位制位來表示數字 例如 第27位為1,第28位為0。表示在map中27存...

bitmap原理及實現

以二進位制位來表示數字 例如 第27位為1,第28位為0。表示在map中27存在28不存在 實現 新增,即設定對應位為1 param arg return this public function set arg else return this 判斷數字是否存在 param arg return ...

BitMap演算法原理及實現實現

1.bitmap是什麼 bitmap是乙個十分有用的結構。所謂的bit map就是用乙個bit位來標記某個元素對應的value,而key即是該元素。由於採用了bit為單位來儲存資料,因此可以大大節省儲存空間。2.bitmap優勢 舉個例子,有乙個無序有界int陣列,初步估計占用記憶體44 16位元組...