BitSet是一个基于二进制位并按需增长的向量;每一个二进制位表示一个布尔值,默认为false;每一个二进制位都可以独立的修改;BitSet支持逻辑与,逻辑或及逻辑异或操作。
BitSet是通过“字数组”来实现的,目前一个“字”由8个字节组成,共64位,即2^6;目前“字”是通过long型整数来表示的。
对于给点的二进制位下标,BitSet是如何设置它的布尔值的呢?下面用一个例子来简单说明。假设我们的下标范围在【0-1023】这个区间,由上面的说明我们可以得知我们至少需要{1024/2^6}= 16“字”(这里通过移位运算来实现除法,即1024>>6)。换句话说就是我们BitSet是由words = new long[16] 这样的数组组成。对于任意合法下标值比如1000,先通过{1000>>6}=15得知我们需要修改的位所影响的值在words[15]这个“字”上。然后通过或运算{words[15] |= (1L<<1000)}将下标1000所在位的值更新为1并将或运算的值保存在words[15]这个“字”上。当我们取出下标1000所在位的值时,只需要通过与运算{words[15] & (1L<<1000)}取其值即可。因应先前我们设置过下标1000的值,所以我们取下标1000的值与运算时,它是1。如果我们没有设置相应下标的值,那么与运算的结果就是0了。需要说明的是在Java中BitSet的实际实现会更繁杂一点,如果有兴趣,可以参考原代码做更多的分析和理解。
那现在讨论一下BitSet可以用来解决什么问题呢?常见的用法是通过它来实现一定范围无序整数的排序算法。下面是一个具体例子。
import java.util.BitSet; public class BitSetAlgorithm { public static void main(String[] args) { // unordered int array int arrays[] = new int[]{100,58,78,44,22,33,73,81,43,64}; // the bit set size should great than the max value 100, and should be multiples of 64. BitSet set = new BitSet(128); for (int index : arrays) { // bit set will update the index's value to true set.set(index); } // Iterate the bit set size for (int i = 0 ; i < set.size() ; i++) { if ( set.get(i)) { System.out.println(i + ","); } } } }
相关推荐
Java中BitSet类是Java集合框架的一部分,它是一种用于处理位操作的高级数据结构。BitSet可以看作是一个只存储布尔值的数组,但相比于原始的布尔数组,BitSet更加内存高效,因为它以64位的块(word)来存储多个布尔值...
Java 数据结构详细教程 Java 数据结构是 Java 编程语言中的一种基本组成部分,它提供了强大的数据结构来存储和管理数据。在 Java 中的数据结构主要包括枚举、位集合、向量、栈、字典、哈希表、属性等接口和类。 ...
Java数据结构是编程基础知识的重要组成部分,对于理解和优化程序性能至关重要。在这个“最最适用的Java数据结构全集”中,你将找到一系列关于如何在Java中实现和使用各种数据结构的源代码。让我们深入探讨一下这些...
在 Java 中,数据结构是程序设计的基础之一,对于构建高效、可维护的应用程序至关重要。Java 提供了一系列内置的数据结构接口和类,帮助开发者有效地管理数据。本文将详细介绍 Java 中的传统数据结构接口和类,包括...
RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...
在整个项目实施过程中,还需要关注数据结构的优化,比如使用Set来避免重复计算,使用优先队列(PriorityQueue)来实现最小堆优化搜索效率,或者使用BitSet进行位运算以节省空间。此外,良好的编程习惯,如代码注释、...
Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性...
java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!
### Java的数据结构详解 #### 教学目标与重点 数据结构和算法构成了程序设计的核心,尤其在Java中,掌握高效的数据处理方式对于提升程序性能至关重要。本章节将深入讲解Java中的数组以及Java集合框架,后者作为...
在Java编程语言中,数据结构是程序设计的基础,它涉及到如何高效地存储和组织数据,以便于访问和操作。这个“基本基于Java的数据结构.zip”压缩包可能包含了一系列关于Java实现常见数据结构的代码示例或教程。让我们...
在Java早期版本中,一些基础数据结构包括枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)和哈希表(Hashtable)。随着Java的发展,Java 2 引入了集合框架(Collection ...
Java语言提供了丰富的数据结构,这些数据结构在编程中扮演着重要的角色,帮助我们高效地组织和管理数据。以下是关于标题和描述中提到的几个关键数据结构的详细说明: 1. 枚举(Enumeration) 枚举在Java中是一种...
Java BitSet 使用场景和代码示例 Java BitSet 是 Java 中的一个重要类,它...Java BitSet 是一个非常有用的类,它可以快速地进行数据统计和分析,且可以节省内存空间。在大数据分析中,BitSet 是一个非常重要的工具。
BitSet是Java提供的一种高效的数据结构,用于存储和操作位集合,它非常适合处理大规模的数据,尤其当数据集中的元素是二进制状态(如存在或不存在,0或1)时。 BitSet的核心原理是利用数组来存储位,每个数组元素...
数据结构与算法 设计模式 软件设计 等文档 ,可以访问我们的官网查看更多内容 [人在地上跑 牛在天上飞](#人在地上跑 牛在天上飞) Java Java-Coding Java-IO Java-IO-练习 [Read or List All Files in a Folder](Java...
在Java编程中,数据结构是存储和组织数据的关键组件,它们提供了高效的操作方式,便于数据的管理和处理。Java工具包提供了多种数据结构,包括一些遗留的类和Java2引入的集合框架。本文将重点讨论其中的一些常见接口...
《JAVA数据结构课程》是关于计算机科学中一个至关重要的主题——数据结构的深入学习资源。在编程领域,数据结构是组织、存储和处理数据的方式,它对于高效算法的设计至关重要。本课程专注于使用Java语言来讲解各种...
数据结构 队列 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、...
bitset是Java中的一种数据结构,通过使用bitset可以实现毫秒级查询。下面我们将详细讲解如何使用bitset实现毫秒级查询。 bitset的内部实现是long数组,每一个位的默认值为false(0)。bitset的长度可以按需增长,...