用 int 来储存 boolean 数组 代码

2017-12-05  本文已影响0人  steamed_bun

提取自Zxing源码: Zxing源码

package com.wx.zxing.bitArray;

/**
 * 用 int 来储存 boolean 数组
 */
public class BitArray {

    private int[] bits;
    /** size 不是 bits 的大小, 而是被保存的数组大小 */
    private int size;


    public BitArray() {
        this.size = 0;
        this.bits = new int[1];
    }

    public BitArray(int size) {
        this.size = 0;
        this.bits = new int[(size + 31) / 32];
    }

    public void encode(boolean bit){
        if (bit){
            bits[size / 32] |= 1 << (size & 0x1F);
        }
        size++;
    }

    public boolean get(int index){
        return (bits[index / size] & (1 << (index & 0x1F))) != 0;
    }

    public int[] getBitArray() {
        return bits;
    }

    public int getSize() {
        return size;
    }

}

测试代码:

package com.wx.zxing.bitArray;

public class BitArrayTest {

    public static void main(String[] args) {
        boolean[] array = new boolean[]{false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true,false,true,false,false,true,true};
        BitArray bitArray = new BitArray(array.length);
        for (int i = 0; i < array.length; i++){
            bitArray.encode(array[i]);
        }
        int[] bits2 = bitArray.getBitArray();
        System.out.println("……………………………………");
        for (int b : bits2){
            System.out.print(b + " ");
        }
        System.out.println();
        for (int i = 0; i < bitArray.getSize(); i++){
            System.out.print(bitArray.get(i) + " ");
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读