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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数