Bitmap
简介
Bit-map就是用一个bit位来标记某个元素对应的Value(若元素存在bit位置为1,不存在则置为0)。可创建一个整型数组(如byte数组,int数组,long数组)来表示。可以使用redis的api来实现对bitmap的运用
代码实现bitmap
BitmapUtil
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package com.cc.bitmap;
public class BitmapUtil {
private static int capacity;
private static int maxValue;
private static byte[] byteBits;
public BitmapUtil(int maxValue) { this.maxValue = maxValue; this.capacity = maxValue / 8 + 1; byteBits = new byte[capacity]; } //存储元素 public void add(int x) { int index = x / 8; int location = x % 8; byteBits[index] |= 1 << location; } //判断是否包含某个元素 public boolean find(int x) { int index = x / 8; int location = x % 8; int temp = byteBits[index] & (1 << location); if (temp != 0) { return true; } return false; } }
|
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| package com.cc.bitmap;
public class Test {
public static void main(String[] args) { int[] arr = {1, 3, 4, 5, 7, 8, 10};
int maxvalue = 0; for (int it : arr) { maxvalue = Math.max(maxvalue, it); }
BitmapUtil bitmapUtil = new BitmapUtil(maxvalue);
for(int i = 0; i < arr.length; i ++) { bitmapUtil.add(arr[i]); }
for(int i = 1; i <= 10; i ++) { boolean ans = bitmapUtil.find(i); if (!ans) { System.out.println("ans = " + ans + "---" + i + "不存在"); } } } }
|
测试结果
1 2 3
| ans = false---2不存在 ans = false---6不存在 ans = false---9不存在
|