C++程序员学Java系列之二九:数据结构之Bitset

2024-05-25 09:08

本文主要是介绍C++程序员学Java系列之二九:数据结构之Bitset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容参考:https://www.w3cschool.cn/java/java-bitset-class.html

Java Bitset类

一个Bitset类创建一种特殊类型的数组来保存位值。BitSet中数组大小会随需要增加。这和位向量(vector of bits)比较类似。

这是一个传统的类,但它在Java 2中被完全重新设计。

BitSet定义了两个构造方法。

第一个构造方法创建一个默认的对象:

BitSet()

第二个方法允许用户指定初始大小。所有位初始化为0。

BitSet(int size)

BitSet中接口中定义的方法如下表所列:

序号 方法描述
1 void and(BitSet bitSet)
对此目标位 set 和参数位 set 执行逻辑与操作。
2 void andNot(BitSet bitSet)
清除此 BitSet 中所有的位,其相应的位在指定的 BitSet 中已设置。
3 int cardinality( )
返回此 BitSet 中设置为 true 的位数。
4 void clear( )
将此 BitSet 中的所有位设置为 false。
5 void clear(int index)
将索引指定处的位设置为 false。
6 void clear(int startIndex, int endIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 false。
7 Object clone( )
复制此 BitSet,生成一个与之相等的新 BitSet。
8 boolean equals(Object bitSet)
将此对象与指定的对象进行比较。
9 void flip(int index)
将指定索引处的位设置为其当前值的补码。
10 void flip(int startIndex, int endIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的每个位设置为其当前值的补码。
11 boolean get(int index)
返回指定索引处的位值。
12 BitSet get(int startIndex, int endIndex)
返回一个新的 BitSet,它由此 BitSet 中从 fromIndex(包括)到 toIndex(不包括)范围内的位组成。
13 int hashCode( )
返回此位 set 的哈希码值。
14 boolean intersects(BitSet bitSet)
如果指定的 BitSet 中有设置为 true 的位,并且在此 BitSet 中也将其设置为 true,则返回 ture。
15 boolean isEmpty( )
如果此 BitSet 中没有包含任何设置为 true 的位,则返回 ture。
16 int length( )
返回此 BitSet 的"逻辑大小":BitSet 中最高设置位的索引加 1。
17 int nextClearBit(int startIndex)
返回第一个设置为 false 的位的索引,这发生在指定的起始索引或之后的索引上。
18 int nextSetBit(int startIndex)
返回第一个设置为 true 的位的索引,这发生在指定的起始索引或之后的索引上。
19 void or(BitSet bitSet)
对此位 set 和位 set 参数执行逻辑或操作。
20 void set(int index)
将指定索引处的位设置为 true。
21 void set(int index, boolean v)
 将指定索引处的位设置为指定的值。
22 void set(int startIndex, int endIndex)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为 true。
23 void set(int startIndex, int endIndex, boolean v)
将指定的 fromIndex(包括)到指定的 toIndex(不包括)范围内的位设置为指定的值。
24 int size( )
返回此 BitSet 表示位值时实际使用空间的位数。
25 String toString( )
返回此位 set 的字符串表示形式。
26 void xor(BitSet bitSet)
对此位 set 和位 set 参数执行逻辑异或操作。

实例

import java.util.BitSet;public class JavaTest {public static void main(String[] args) {// TODO Auto-generated method stub// 初始化其位的大小为16位,所有初始化的位为0BitSet bits1 = new BitSet(16);// 0000 0000 0000 0000BitSet bits2 = new BitSet(16);// 0000 0000 0000 0000// set some bitsfor (int i = 0; i < 16; i++) {if ((i % 2) == 0)bits1.set(i);if ((i % 5) != 0)bits2.set(i);}System.out.println("Initial pattern in bits1: ");System.out.println(bits1);// 0101 0101 0101 0101System.out.println("\nInitial pattern in bits2: ");System.out.println(bits2); // 0111 1011 1101 1110// AND bits,对应位都为1才为1bits2.and(bits1);// 0101 0101 0101 0101// 0111 1011 1101 1110//=0101 0001 0101 0100// 14 12   8  6 4  2 System.out.println("\nbits2 AND bits1: ");System.out.println(bits2);// OR bits,对应位有一个1就为1bits2.or(bits1);// 0101 0101 0101 0101// 0101 0001 0101 0100//=0101 0101 0101 0101// 14 12 10 8  6 4  2 0System.out.println("\nbits2 OR bits1: ");System.out.println(bits2);// XOR bits,对应位不同为1,相同为0bits2.xor(bits1);// 0101 0101 0101 0101// 0101 0101 0101 0101// 0000 0000 0000 0000System.out.println("\nbits2 XOR bits1: ");System.out.println(bits2);}
}

运行结果:

Initial pattern in bits1: 
{0, 2, 4, 6, 8, 10, 12, 14}Initial pattern in bits2: 
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}bits2 AND bits1: 
{2, 4, 6, 8, 12, 14}bits2 OR bits1: 
{0, 2, 4, 6, 8, 10, 12, 14}bits2 XOR bits1: 
{}


没什么好说的,概念和C++等其它语言一样;





这篇关于C++程序员学Java系列之二九:数据结构之Bitset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001074

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.