package com.jmfy.xianxia.core.util;
import java.util.ArrayList;
import java.util.List;
public class BitMap {
byte[] bitmap = null;
int maxIndex = 0;
//maxIndex 从0开始
public BitMap(int maxIndex) {
bitmap = new byte[(maxIndex + 1 + 7) / 8];
this.maxIndex = maxIndex;
}
public boolean checkBit(int index) throws Exception {
if (index < 0 || index > maxIndex) {
throw new Exception("index<0 || index=" + index + ">maxIndex=" + maxIndex);
}
int byindex = index / 8;
int btindex = index % 8;
if ((bitmap[byindex] & (byte) (1 << btindex)) == 0) {
return false;
}
return true;
}
public void setBit(int index) throws Exception {
if (index < 0 || index > maxIndex) {
throw new Exception("index<0 || index=" + index + ">maxIndex=" + maxIndex);
}
int byindex = index / 8;
int btindex = index % 8;
bitmap[byindex] = (byte) (bitmap[byindex] | (byte) (1 << btindex));
}
public List<Integer> getIntByBit() {
List<Integer> ids = new ArrayList<>();
if (bitmap == null) {
return ids;
}
int index = 1;
for (byte i : bitmap) {
if ((int) (i & 255) == 0) {
index += 8;
continue;
}
int temp = 1;
for (int y = 0; y < 8; y++) {
if ((int) (i & temp) != 0) {
index++;
ids.add(index);
}
temp = temp << 1;
}
}
return ids;
}
public byte getByte(int index) throws Exception {
if (index < 0 || index > maxIndex) {
throw new Exception("index<0 || index=" + index + ">maxIndex=" + maxIndex);
}
int byindex = index / 8;
return bitmap[byindex];
}
public boolean isEmpty() {
int byCount = (maxIndex + 1 + 7) / 8;
for (int i = 0; i < byCount; i++) {
if (bitmap[i] != 0) {
return false;
}
}
return true;
}
}
BitMap java实现
最新推荐文章于 2024-08-22 10:37:57 发布