Java 中 BitSet 类的用法

Java 中 BitSet 类的用法

  • API
    • 构造
    • 置位为 true
    • 清除为 false
    • 查找
    • 位反转
    • 长度
    • 运算
    • 其他
  • 原理
    • 底层数据结构
    • 如何工作

API

构造

  1. 无参构造 :默认为 64 个 bit 的容量
	BitSet bitset = new BitSet();
  1. 有参构造 :设置为 n 个 bit 的容量
	BitSet bitset = new BitSet(1024);
  1. 静态工厂的 valueOf 构造 :支持从 byte[], long[], ByteBuffer, LongBuffer 四种类型构造 Bitset
   BitSet.valueOf(bytes);BitSet.valueOf(longs);BitSet.valueOf(byteBuffer);BitSet.valueOf(longBuffer);

置位为 true

  1. 单独置位
	bitset.set(4);//索引为4的位置的比特被置为1,返回void
  1. 批量置位
	bitset.set(4,6);//索引在[4,6)范围内的位置的比特被置为1,返回void

清除为 false

  1. 单独清除
	bitset.clear(4);//索引为4的位置的比特被置为0,返回void
  1. 批量清除
	bitset.clear(4,6);//索引在[4,6)范围内的位置的比特被置为0,返回void
  1. 全部清除
	bitset.clear();//所有位置都被清空为0,返回void

查找

  1. 查询某一位是否已被置位
	bitset.get(4);//返回boolean,为true表示该位被置位
  1. 获取某区间的 BitSet
	bitset.get(4,6);//返回另一个 BitSet,内容取 bitset的[4,6)之间的元素

注:获取的区间后,索引的编号会改变,比如这里新的 BitSet 的 0 号索引对应的是原来 BitSet 的 4 号索引

位反转

	bitset.flip(4);bitset.flip(4,6);

长度

有三个和长度相关的 API,分别是 size、cardinal、length

  1. size:返回该 BitSet 的最大容量
  2. cardinal:返回该 BitSet 中 1 的个数
  3. length:返回最后一个1之前的所有元素的个数,如果一个1也没有就返回0

运算

  1. 判断是否有交集
	first.intersects(second);//返回boolean,如果有交集元素则为true
  1. 求交集
	first.and(second);//返回一个 BitSet
  1. 求并集
	first.or(second);//返回一个 BitSet
  1. 求异或集
	first.xor(second);//返回一个 BitSet

	bitSet.stream();//返回一个 Stream 流

其他

下面四个方法顾名思义:

	 int idx = bitset.nextSetBit(fromIndex);int idx = bitset.previousSetBit(fromIndex); int idx = bitset.nextClearBit(fromIndex);int idx = bitset.previousClearBit(fromIndex); 

原理

底层数据结构

BitSet 的底层数据结构是 long[] 数组

如何工作

置位时,把1左移对应的位数,再与 long[] 中特定的 long 元素做或运算
查询时,把1左移对应的位数,再与 long[] 中特定的 long 元素做与运算,运算结果大于0说明该位为true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Framework 服务实现监控可观测性最佳实践

环境信息 系统环境:Windows Server开发语言:.NET Framework > 4.6.1APM探针包:ddtrace 准备工作 安装 Datakit 主机部署: 主机安装 - 观测云文档 打开采集 APM 采集器 Windows 主机配置 # 到如下路径,把ddtr…

广东省30m二级分类土地利用数据(矢量)

广东省,地处中国大陆最南部,属于东亚季风区,从北向南分别为中亚热带、南亚热带和热带气候,是中国光、热和水资源最丰富的地区之一。主要河系为珠江的西江、东江、北江和三角洲水系以及韩江水系。广东省面积为17.977万平方公里&…

vue+element 前端实现增删查改+分页,不调用后端

前端实现增删查改分页&#xff0c;不调用后端。 大概就是对数组内的数据进行增删查改分页 没调什么样式&#xff0c;不想写后端&#xff0c;当做练习 <template><div><!-- 查询 --><el-form :inline"true" :model"formQuery">&l…

2024山东医养健康展,济南养老产业展,中国老龄用品展

打造养老产业交流与合作平台&#xff0c;助力企业便捷开拓买方市场&#xff0c;2024山东老博会5月27日举办&#xff1b; 2024第6届中国&#xff08;济南&#xff09;国际养老服务业展览会&#xff08;CSOLDE山东老博会&#xff09; The 2024 sixth China (Jinan) Internationa…

高性能 MySQL 第四版(GPT 重译)(一)

前言 由 Oracle 维护的官方文档为您提供了安装、配置和与 MySQL 交互所需的知识。本书作为该文档的伴侣&#xff0c;帮助您了解如何最好地利用 MySQL 作为强大的数据平台来满足您的用例需求。 本版还扩展了合规性和安全性在操作数据库足迹中的日益重要作用。隐私法律和数据主…

GPT系列 论文阅读笔记

文章目录 GPT-1GPT-2GPT-3 GPT-1 GPT-1的核心&#xff1a;基于Transformer的解码器构建一个模型&#xff0c;在大量无标号的文本数据上训练一个模型&#xff0c;然后再在下游的子任务上进行微调。当前面临的问题&#xff1a;在NLP领域&#xff0c;有各种各样的下游任务。目前&…

c++ 构造函数详细介绍

c对象的创建 c对象的创建一般分为以下三个阶段&#xff1a; 分配内存&#xff1a; ■ 在堆区、栈区或者全局数据区留出足够多的字节。这个时候的内存还比较“原始”&#xff0c;没有被“教化”&#xff0c;它所包含的数据一般是零值或者随机值&#xff0c;没有实际的意义&…

使用Java版工程行业管理系统源码,提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

Java------数据结构之栈与队列(简单讲解)

本篇碎碎念&#xff1a;时隔n个月&#xff0c;继续写博客&#xff0c;假期落下的进度&#xff0c;在开学后努力追赶&#xff0c;假期不努力&#xff0c;开学徒伤悲啊&#xff0c;此时此刻真想对自己说一句&#xff0c;活该啊~~~~ 欠下的链表练习题讲解会在下次更新~~~~ 今日份励…

Day53| 1143 最长公共子序列 1035 不相交的线 53 最大子序和 动态规划

目录 1143 最长公共子序列 1035 不相交的线 53 最大子序和 动态规划 1143 最长公共子序列 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int>(text2.si…

Ubuntu20.04 安装fcitx5输入法

序 ubuntu 20.04.3下fcitx5 需要从flatpak安装&#xff0c;&#xff08;由于qt版本&#xff0c;fcitx5-config只能安装在20.10上&#xff09;&#xff0c;中间出了各种问题&#xff0c;最后发现以下解决方案最好&#xff1a; 安装flatpak (建议使用官方ppa,版本较新) 1 2 3 …

应届生/实习生租房经验帖

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 博主本人在杭州互联网小镇和北京中关村都实习过一段时间&#xff0c;分享下租房的经历&#xff0c;以及在这过程中踩的坑…

视频素材库网站下载的地方在哪里?

视频素材库网站下载的地方在哪里&#xff1f;这是很多短视频创作者都会遇到的问题。别着急&#xff0c;今天我就来给大家介绍几个视频素材库网站下载的好去处&#xff0c;让你的视频创作更加轻松有趣&#xff01; 蛙学网&#xff1a;视频素材库网站下载的一定要选择蛙学网啦&am…

C++利用开散列哈希表封装unordered_set,unordered_map

C利用开散列哈希表封装unordered_set,unordered_map 一.前言1.开散列的哈希表完整代码 二.模板参数1.HashNode的改造2.封装unordered_set和unordered_map的第一步1.unordered_set2.unordered_map 3.HashTable 三.string的哈希函数的模板特化四.迭代器类1.operator运算符重载1.动…

WPF —— DataGrid数据网格

1 &#xff1a;DataGrid简介 DataGrid 是数据网格 : 可以显示网格数据的控件&#xff0c;通过自定义列模版 来去实现各种网格效果 &#xff0c; 可以使用以下几中标签显示不同数据 2 &#xff1a;DataGrid常用的组件 显示文本: DataGridTextColumn 显示复选框: DataGridChec…

【计算机考研】杭电 vs 浙工大 怎么选?

想求稳上岸的话&#xff0c;其他几所学校也可以考虑&#xff0c;以留在本地工作的角度考虑&#xff0c;这几所学校都能满足你的需求。 如果之后想谋求一份好工作&#xff0c;肯定优先杭电是比较稳的&#xff0c;当然复习的时候也得加把劲。 这个也可以酌情考虑&#xff0c;报…

C# 设置AutoScroll为true没效果的原因分析和解决办法

C#中添加tabControl 分页&#xff0c;将autoscroll设置为true发现缩小窗口没有滚动条效果。该问题出现后&#xff0c;检索发现也有很多人询问了该问题&#xff0c;但是都没有给出解决方案。 原因是内部button的属性Anchor设置为top、left、right、bottom导致的缩小界面窗口也没…

【逆向】常用指令操作adb和logcat

快将尘埃掸落 别将你眼眸弄脏 或许吧 谈笑中你早已淡忘 而我在颠沛中 已饱经一脸沧桑 思念需要时间 慢慢调养 &#x1f3b5; 张小九《余香》 在安卓开发和调试过程中&#xff0c;adb&#xff08;Android Debug Bridge&#xff09;是一个无可替代的工具。它…

为什么Hashtable不允许插入nuIl键和null值?

1、典型回答 浅层次的来回答这个问题的答案是&#xff0c;JDK 源码不支持 Hashtable 插入 value 值为 null&#xff0c;如以下 JDK 源码所示&#xff1a; 也就是 JDK 源码规定了&#xff0c;如果你给 Hashtable 插入 value 值为 null 就会抛出空指针异常。 并且看上面的 JDK …

node.js常用的命令

node.js常用的命令包括&#xff1a; 安装包。使用npm install <包名>版本号安装指定版本的包&#xff0c;或者使用npm install <包名>安装包到当前目录。 卸载包。使用npm uninstall <包名>卸载包。 全局安装包。使用npm install <包名> -g全局安装包…