package csdn;
/**
* 位图的实现
* 应用场景: 找出大量数据的最大值;统计大量数据重复出现的数据等;
* 非常节约空间
*/
public class BitMap2 {
private byte[] bytes;
private int length;
public BitMap2(int length){
this.length=length;
bytes=new byte[length%8==0?length/8:(length/8+1)];
}
public boolean get(int index){
//在 目标字节的索引 从0开始
int i=index %8;
if((bytes[index/8] & (((byte)0b11111111)<<(31-i)>>(31-i)>>i<<i)) >>i == 0 ){
return false;
}else{
return true;
}
}
public void set(int index,boolean value){
if(value){
bytes[index>>3] |= 1<<(index & 7);
}else{
bytes[index>>3] &= ~(1 <<(index & 7));
}
}
public static void main(String[] args) {
BitMap2 bitMap2=new BitMap2(5);
for (int i = 0; i < 5; i++) {
System.out.print(bitMap2.get(i)+" ");
}
System.out.println("===每次添加一个数据,并打印====");
for (int i = 0; i < 5; i++) {
bitMap2.set(i, true);
for (int j = 0; j < 5; j++) {
System.out.print(bitMap2.get(j)+" ");
}
System.out.println();
}
}
}
每日算法20210318:位图的实现
最新推荐文章于 2024-05-03 10:14:52 发布