1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
public class BitMap {
private long length; public long size; private static int[] bitsMap; private static final int[] BIT_VALUE = {0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x00000100, 0x00000200, 0x00000400, 0x00000800, 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00010000, 0x00020000, 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000};
public BitMap(long length) { this.length = length; bitsMap = new int[(int) (length >> 5) + ((length & 31) > 0 ? 1 : 0)]; this.size = bitsMap.length; }
public int getBit(long index) { if (index < 0 || index > length) { throw new IllegalArgumentException("length value illegal!"); } int intData = (int) bitsMap[(int) ((index - 1) >> 5)]; return ((intData & BIT_VALUE[(int) ((index - 1) & 31)])) >>> ((index - 1) & 31); }
public void setBit(long index) { if (index < 0 || index > length) { throw new IllegalArgumentException("length value illegal!"); } int belowIndex = (int) ((index - 1) >> 5); int offset = (int) ((index - 1) & 31); int inData = bitsMap[belowIndex]; bitsMap[belowIndex] = inData | BIT_VALUE[offset]; }
public int[] getMaxValue() { return BIT_VALUE; }
public int[] getBitsMap() { return bitsMap; }
public String bitMapToString() { StringBuilder result = new StringBuilder("[\n"); for (int element : bitsMap) { String eleString = Integer.toBinaryString(element); StringBuilder one = new StringBuilder(); for (int i = 0; i < 32 - eleString.length(); i++) one.append("0"); one.append(eleString); result.append(one.append(",\n")); } return result.append("]").toString(); } }
|