`
neatchenheng
  • 浏览: 25043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java数据结构之BitSet

阅读更多

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类是Java集合框架的一部分,它是一种用于处理位操作的高级数据结构。BitSet可以看作是一个只存储布尔值的数组,但相比于原始的布尔数组,BitSet更加内存高效,因为它以64位的块(word)来存储多个布尔值...

    Java 数据结构详细教程

    Java 数据结构详细教程 Java 数据结构是 Java 编程语言中的一种基本组成部分,它提供了强大的数据结构来存储和管理数据。在 Java 中的数据结构主要包括枚举、位集合、向量、栈、字典、哈希表、属性等接口和类。 ...

    最最适用的java数据结构全集

    Java数据结构是编程基础知识的重要组成部分,对于理解和优化程序性能至关重要。在这个“最最适用的Java数据结构全集”中,你将找到一系列关于如何在Java中实现和使用各种数据结构的源代码。让我们深入探讨一下这些...

    java数据结构知识点集合.doc

    在 Java 中,数据结构是程序设计的基础之一,对于构建高效、可维护的应用程序至关重要。Java 提供了一系列内置的数据结构接口和类,帮助开发者有效地管理数据。本文将详细介绍 Java 中的传统数据结构接口和类,包括...

    RoaringBitmap, 在Java中,一个更好的压缩 bitset.zip

    RoaringBitmap, 在Java中,一个更好的压缩 bitset RoaringBitmap Bitsets,也称为位图,通常用作快速数据结构。 不幸的是,他们可以使用太多的内存。 为了补偿,我们经常使用压缩位图。咆哮位图是压缩位图,它比传统...

    数据结构课程设计:手机通通讯录模拟,24点扑克牌游戏)

    在整个项目实施过程中,还需要关注数据结构的优化,比如使用Set来避免重复计算,使用优先队列(PriorityQueue)来实现最小堆优化搜索效率,或者使用BitSet进行位运算以节省空间。此外,良好的编程习惯,如代码注释、...

    Java 数据结构

    Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性...

    java bitset 源码解析.rtf

    java bitset 高级数据结构 源码解析 适合 0-3 年开发人员,进阶、面试必备知识!

    基本基于java的数据结构.zip

    在Java编程语言中,数据结构是程序设计的基础,它涉及到如何高效地存储和组织数据,以便于访问和操作。这个“基本基于Java的数据结构.zip”压缩包可能包含了一系列关于Java实现常见数据结构的代码示例或教程。让我们...

    浅谈Java BitSet使用场景和代码示例

    Java BitSet 使用场景和代码示例 Java BitSet 是 Java 中的一个重要类,它...Java BitSet 是一个非常有用的类,它可以快速地进行数据统计和分析,且可以节省内存空间。在大数据分析中,BitSet 是一个非常重要的工具。

    Java工具包提供了强大的数据结构

    在Java早期版本中,一些基础数据结构包括枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)和哈希表(Hashtable)。随着Java的发展,Java 2 引入了集合框架(Collection ...

    Java的数据结构.docx

    Java语言提供了丰富的数据结构,这些数据结构在编程中扮演着重要的角色,帮助我们高效地组织和管理数据。以下是关于标题和描述中提到的几个关键数据结构的详细说明: 1. 枚举(Enumeration) 枚举在Java中是一种...

    Java海量数据处理BitSetmd,学习代码d

    BitSet是Java提供的一种高效的数据结构,用于存储和操作位集合,它非常适合处理大规模的数据,尤其当数据集中的元素是二进制状态(如存在或不存在,0或1)时。 BitSet的核心原理是利用数组来存储位,每个数组元素...

    javabitset源码-all-kinds-book:java大数据sparkflinkredishivehbasekafka面试题数据结构

    数据结构与算法 设计模式 软件设计 等文档 ,可以访问我们的官网查看更多内容 [人在地上跑 牛在天上飞](#人在地上跑 牛在天上飞) Java Java-Coding Java-IO Java-IO-练习 [Read or List All Files in a Folder](Java...

    浅析Java 数据结构常用接口与类

    在Java编程中,数据结构是存储和组织数据的关键组件,它们提供了高效的操作方式,便于数据的管理和处理。Java工具包提供了多种数据结构,包括一些遗留的类和Java2引入的集合框架。本文将重点讨论其中的一些常见接口...

    EstructurasDeDatos:JAVA数据结构课程

    《JAVA数据结构课程》是关于计算机科学中一个至关重要的主题——数据结构的深入学习资源。在编程领域,数据结构是组织、存储和处理数据的方式,它对于高效算法的设计至关重要。本课程专注于使用Java语言来讲解各种...

    javabitset源码-java_master:后端架构师技术图谱

    数据结构 队列 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、...

    使用bitset实现毫秒级查询(实例讲解)

    bitset是Java中的一种数据结构,通过使用bitset可以实现毫秒级查询。下面我们将详细讲解如何使用bitset实现毫秒级查询。 bitset的内部实现是long数组,每一个位的默认值为false(0)。bitset的长度可以按需增长,...

Global site tag (gtag.js) - Google Analytics