在处理大数据的排序的时候,位图是经常使用的一种数据结构,在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$
分享到:
相关推荐
事实上,任何你可以做index.Of lastIndexOf slice splice join reverse filter sort等,你可以用一个BitArray实例做。 请记住,元素将始终是数字0或1 。 由于仍然无法从Array对象继承,因此要利用方括号语法(即...
离散数学作业:JAVA实现BitArray形式的集合(用HashSet实现)及其运算(交集,并集,差集)
位图法的原理是使用一个或多个数组来表示位图,每个数组元素对应于一个位(bit),其中1表示存在,0表示不存在。例如,使用8位整数可以表示的最大十进制数值为99999999,如果每个数组元素对应于一个位,那么把所有的...
有时,您只需要在Javascript中存储一堆位。 如今,最好的方法是使用带类型的Uint8Array和一些位掩码,这实际上是此类的全部工作。 用法如下: if(skeptical) { console.assert(BitArray.test()); } var ba = new...
在本段文字中,首先需要指出的是,涉及的内容是关于数据结构与...整段文字所展示的目录结构和章节标题为读者提供了一个关于数据结构和算法Java实现的全面概述,并指出了教材的法律地位和读者在使用时应注意的版权问题。
它包含了一些特定于Java桌面应用的类,如`com.google.zxing.client.j2se.Scanner`,这个类提供了一个简单的命令行扫描器,可以捕获来自摄像头的视频流,并实时解码条码。此外,`javase-3.3.0.jar`还提供了`...
散列表是一种利用哈希函数实现高效查找的字典实现方式,`HashTable`类便是.NET框架中实现散列表的一个例子。 #### 十、链表与二叉树 链表是另一种常用的数据结构,尽管在C#中不如在C++中那样常见,但仍然在很多...
虽然大多数数据结构与算法的书籍都使用Java或C++语言编写,本书《数据结构与算法 C#语言描述》则以C#为教学语言,适合C#程序员学习,书中内容构建于.NET框架之上,涵盖了C#环境下使用和实现各种数据结构与算法的方法...
每个位代表一个二进制数,即0或1。在计算机科学中,所有数据都是以二进制形式存储的,因此理解位串有助于我们更有效地利用计算机的内存和处理能力。位串的长度可以是任意的,从1位到数百万位不等,取决于实际需求。 ...
C#语言不仅是一种强大的编程语言,更是.NET框架的一个组成部分。在.NET框架中,包含了广泛的数据结构类,如Array、ArrayList、Collection、Stack、Queue、Hashtable、SortedList等。这些类为开发者提供了丰富的选择...
综上所述,《数据结构与算法:C#_语言描述(中文)》不仅为C#程序员提供了一个全面学习数据结构与算法的平台,还通过实践导向的教学方式,让学习过程变得生动有趣,是每位致力于提高编程技能和数据处理能力的C#程序员...
随着软件工程领域的不断发展,掌握高效的数据结构与算法成为了每一个专业程序员必备的技能。尽管市面上已有不少关于数据结构与算法的教材,但多数是以传统语言如Java或C++编写的。本书旨在填补这一空白,特别针对C#...