在处理大数据的排序的时候,位图是经常使用的一种数据结构,在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$
分享到:
相关推荐
java实现一个简单的植物大战僵尸游戏.zipjava实现一个简单的植物大战僵尸游戏.zipjava实现一个简单的植物大战僵尸游戏.zipjava实现一个简单的植物大战僵尸游戏.zipjava实现一个简单的植物大战僵尸游戏.zipjava实现一...
java实现的一个简单生命游戏java实现的一个简单生命游戏java实现的一个简单生命游戏 java实现的一个简单生命游戏java实现的一个简单生命游戏java实现的一个简单生命游戏 java实现的一个简单生命游戏java实现的一个...
利用java实现简易计算器,java源代码,利用java实现简易计算器
用java实现的一个简易浏览器。教你如何在自己的程序中显示网页上的内容。
java 实现一个录音机 java 实现一个录音机 java 实现一个录音机
用Java实现一个队列
java实现直播系统,有主播界面,围观界面,可以相互切换,登录权限
java实现的一个简单的计算器功能,可以进行加减乘除,用面向对象的思想实现的
Java实现简单数据库 功能:select、 insert(插入后排序)、create、delete等
java实现一个简单的网络爬虫程序,可以抓取网页,并输出网页源代码
人工智能-项目实践-手写数字识别-用java实现一个简单的卷积神经网络,共三层可以识别mnsit 用java实现一个简单的卷积神经网络,共三层可以识别mnsit
这是一个用java实现的简易的编译器,他能将一个具有加法和乘法的算术表达式编译成类汇编语言,这是我博文对应的代码,具体请参看我的博文: http://blog.csdn.net/tyler_download/article/details/50668983 例如...
最近刚刚学习Java,试着做了一个简单的登录注册界面,只是点击按钮之后输出响应,并没有完成后续的跳转操作。
java调用JSch实现的简易的命令行Xshell(运行jar包时,执行ls命令乱码(开发环境运行正常),改用sudo ls运行正常)
用java实现了一个简单的扫雷游戏
Java实现进度条 Java实现进度条 Java实现进度条 Java实现进度条 Java实现进度条
用Java语言实现简单邮件系统 用Java语言实现简单邮件系统 用Java语言实现简单邮件系统
java实现流量控制java实现流量控制java实现流量控制java实现流量控制java实现流量控制