package link;
/**
* Bitmap算法
* @author
*
*/
public class Sort7 {
//每一个word是一个long 类型的元素,对应一个64 位二进制数据
private long[] words;
//BitMap的位数大小
private int size;
public Sort7(int size) {
this.size=size;
this.words=new long[(getWordIndex(size-1)+1)];
}
/**
* 判断BitMap的某一位的状态
*/
public boolean getBit(int bitIndex) {
if(bitIndex<0||bitIndex>size-1) {
throw new IndexOutOfBoundsException("超过Bitmap有效范围");
}
int wordIndex=getWordIndex(bitIndex);
return (words[wordIndex]&(1L<<bitIndex))!=0;
}
/**
* 把Bitmap某一位设置为true
* @param bitIndex 位图的第bitIndex位
*/
public void setBit(int bitIndex) {
if(bitIndex<0||bitIndex>size-1) {
throw new IndexOutOfBoundsException("超出BitMap的有效围");
}
int wordIndex=getWordIndex(bitIndex);
words[wordIndex]|=(1L<<bitIndex);
}
/**
* 定位BitMap某一位所对应的我word
* @param bitIndex 位图的第bitIndex位
* @return
*/
private int getWordIndex(int bitIndex) {
//向右移动6位,相当于除以64
return bitIndex>>6;
}
public static void main(String[] args) {
Sort7 bitMap=new Sort7(128);
bitMap.setBit(126);
bitMap.setBit(75);
System.out.println(bitMap.getBit(126));
System.out.println(bitMap.getBit(78));
}
}
java(Bitmap算法)
最新推荐文章于 2024-09-25 08:03:37 发布