`

Java入门-BitSet的使用

    博客分类:
  • Java
 
阅读更多

在使用PAT-Tree的中文实现中需要用到大量的位运算,BitSet在效率上的表现可能尚待商榷,不过拿来做实验是没有问题的。

 

在Java的文档中说明了BitSet实现了Vector接口,是一个可按需增长的存储位的数据结构,位的值位布尔型,初始大小为64bit,初始值均为“false”。

常用方法:

  • void set(int bitIndex)、void set(int bitIntex, boolean value) : 将bitIndex位置的值设为“true”或者给定的值
  • boolean get(int bitIndex) :获取bitIndex位置处的值
  • BitSet get(int fromIndex, int toIndex) :以BitSet存储返回fromIndex与toIndex区间之间的值
  • void clear()、void clear(int bitIndex)、void clear(int fromIndex, int toIndex) :置整个BitSet/相应位置/区间的值为“false”
  • int length() :BitSet的逻辑大小(实际使用大小),值为“true”最大的索引位加1
  • int size() :BitSet的实际大小,默认为64
  • and(BitSet set)、andNot(BitSet set) … :与另一BitSet相应的逻辑位运算
  • String toString() :返回值为“true”的位置的String对象,如第1和第10位为“true”,其他位置为“false”,则返回{1, 10}

应用实例:下面的代码将字符转换为与编码对应的二进制字符串:

package org.eone.test;
 
import java.util.BitSet;
 
public class TestBitSet {
 
    private static String toBitSet(String str){
        String result = "[";
        BitSet bitSet = new BitSet();
        byte[] strBits = str.getBytes();
        for(int i = 0; i< strBits.length * 8; i++){
            if((strBits[i / 8] & (128 >> (i % 8))) > 0){
                bitSet.set(i);
            }
        }
        for(int i = 0; i < bitSet.length(); i++){
            if(bitSet.get(i))
                result += "1";
            else
                result +="0";
        }
        result += "]";
        return result;
    }
 
    public static void main(String[] args) {
        String str = "测试一下";
        System.out.println(toBitSet(str));
    }
 
}
 使用时还需注意,在多线程情况下要注意线程安全问题。
分享到:
评论

相关推荐

    java 编程入门思考

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    Java入门笔记3_Datastructure

    ### Java入门笔记3_Datastructure知识点详解 #### 4. 数据结构 (Data Structure) ##### 4.1 数组 (Array) **4.1.1 基本概念** 数组在Java中被视为一种对象类型,这意味着在使用数组之前必须对其进行实例化。数组...

    Java初学者入门教学

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    数字图像处理 java 语言描述

    对于自定义的编码格式,可以使用BitSet或ByteBuffer等工具进行处理。 最后,我们还要注意性能优化。由于图像处理通常涉及大量的计算,因此在Java中进行图像处理时,应考虑使用多线程、缓存策略以及避免不必要的对象...

    thinking in java

    - 讨论了如何使用集成开发环境(IDE)如Eclipse或IntelliJ IDEA编写和运行Java程序。 #### 1.5 编写和运行Java程序 - **编译过程**:详细解释了Java源代码如何被编译成字节码。 - **运行时环境**:阐述了Java虚拟机...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    java联想(中文)

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    JAVA_Thinking in Java

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    Thinking in Java简体中文(全)

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    Think in Java(中文版)chm格式

    A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调...

    Lucene入门demo

    2. **性能调优(Performance Tuning)**: 通过调整缓存设置、使用倒排索引位集(Bitset)优化、合理分配硬件资源等方式提升性能。 3. **错误处理与恢复(Error Handling and Recovery)**: 确保在异常情况下能正确...

    Java 数据结构

    位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性(Properties) 以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。 枚举...

    ThinkInJava

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    thinkinjava

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

    C++大学教程,一本适合初学者的入门教材(part2)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

Global site tag (gtag.js) - Google Analytics