Java BitMap

tech2022-09-15  108

参考:https://www.jianshu.com/p/e530baada558

import java.util.*; /** * https://www.jianshu.com/p/e530baada558 */ public class BitMap { private byte[] bits; public BitMap(int n) { bits = new byte[getIndex(n)+1]; } /** * 找到byte数组中对应的index * 右移3位,相当于除以8 * @param num * @return */ public int getIndex(int num) { return num >>> 3; } /** * 找到byte中对应的位置 * 与0x07相与,相当于对8求余 * @param num * @return */ public int getPosition(int num) { return num & 0x07; } public void add(int num) { bits[getIndex(num)] |= 1 << getPosition(num); } public void clear(int num) { bits[getIndex(num)] &= ~(1 << getPosition(num)); } public boolean contain(int num) { return (bits[getIndex(num)] & 1 << getPosition(num)) != 0; } public static void main(String[] args) { // bitMap去重 BitMap bitMap = new BitMap(20); int[] vals = {3, 8, 9, 10, 2, 3, 9, 7, 2, 0, 10}; List<Integer> res = new ArrayList<>(); for(int val: vals) { if(!bitMap.contain(val)) { bitMap.add(val); res.add(val); } } System.out.println(res); // [3, 8, 9, 10, 2, 7, 0] } }
最新回复(0)