Java兑现一个简单的BitArray
Java实现一个简单的BitArray
在处理大数据的排序的时候,位图是经常使用的一种数据结构,在JDK中已经提供了现成的BitSet类,但是如果需要做一些比较简单的应用且能够有效控制程序的效率,还是使用数组实现一个简单的BitArray吧。以下是一个简单BitArray的实现,没有考虑线程安全的问题,适合在不需要多线程并发的情况下使用。
程序运行的结果为:
Lab-Computer-0db2f6:JavaExercises labuser$ java BitArray
1
Lab-Computer-0db2f6:JavaExercises labuser$
在处理大数据的排序的时候,位图是经常使用的一种数据结构,在JDK中已经提供了现成的BitSet类,但是如果需要做一些比较简单的应用且能够有效控制程序的效率,还是使用数组实现一个简单的BitArray吧。以下是一个简单BitArray的实现,没有考虑线程安全的问题,适合在不需要多线程并发的情况下使用。
import java.lang.IllegalArgumentException; public class BitArray { private int[] bits = null; private int length; private final static int[] bitValue = { 0x80000000, 0x40000000, 0x20000000, 0x10000000, 0x08000000, 0x04000000, 0x02000000, 0x01000000, 0x00800000, 0x00400000, 0x00200000, 0x00100000, 0x00080000, 0x00040000, 0x00020000, 0x00010000, 0x00008000, 0x00004000, 0x00002000, 0x00001000, 0x00000800, 0x00000400, 0x00000200, 0x00000100, 0x00000080, 0x00000040, 0x00000020, 0x00000010, 0x00000008, 0x00000004, 0x00000002, 0x00000001 }; public BitArray(int length){ if(length<0){ throw new IllegalArgumentException("length must be above zero!"); } bits = new int[length/32+((length%32)>0?1:0)]; this.length = length; } public int getBit(int index){ if(index<0 || index>length) { throw new IllegalArgumentException("length value illegal!"); } int intData=bits[index/32]; return ((intData & bitValue[index%32])>>>(32-index%32-1)); } public void setBit(int index,int value) { if(index<0||index>length) { throw new IllegalArgumentException("length value illegal!"); } if(value!=1&&value!=0){ throw new IllegalArgumentException("value must be 1 or 0!"); } int intData = bits[index/32]; if(value==1) { bits[index/32] = intData | bitValue[index%32]; }else{ bits[index/32] = intData & ~bitValue[index%32]; } } public int getLength() { return length; } public static void main(String[] args){ BitArray bitArray = new BitArray(100000); bitArray.setBit(100,1); System.out.println(bitArray.getBit(100)); } }
程序运行的结果为:
Lab-Computer-0db2f6:JavaExercises labuser$ java BitArray
1
Lab-Computer-0db2f6:JavaExercises labuser$