Java BitSet 类:初学者友好指南

你好,有抱负的 Java 程序员!今天,我们将开始一段激动人心的旅程,进入 Java BitSet 类的世界。如果你是编程新手,不用担心;我将作为你的友好向导,一步一步地解释一切。那么,让我们开始吧!

Java - BitSet Class

引言

想象一下,你有一大袋弹珠,你想跟踪哪些是你有的,哪些是你没有的。Java 中的 BitSet 类就像那个袋子,但里面存储的不是弹珠,而是位(0和1)。它是一个特殊的工具,让我们能够高效地处理位组。

在计算机世界,我们经常需要处理布尔值集合(真或假)。BitSet 类为我们提供了一种整洁的方式来做到这一点,而不会占用太多内存。这就像有一排很长的开关,可以打开或关闭。

类声明

在 Java 中,BitSet 类是 java.util 包的一部分。要在程序中使用它,你需要像这样导入它:

import java.util.BitSet;

将这一行视为告诉 Java:“嘿,我想在我的程序中使用那个酷炫的 BitSet 工具!”

类构造函数

当我们想要创建一个新的 BitSet 时,我们有一些选择。这就像选择你想要的弹珠袋有多大。以下是构造函数:

构造函数 描述
BitSet() 创建一个初始大小为 64 位的 BitSet
BitSet(int nbits) 创建一个具有特定初始大小的 BitSet

让我们看看这些构造函数的行动:

BitSet bitSet1 = new BitSet(); // 默认大小(64位)
BitSet bitSet2 = new BitSet(128); // 初始大小为 128 位

在第一行中,我们创建了一个具有默认大小的 BitSet。在第二行中,我们说的是:“我想要一个可以容纳至少 128 位的 BitSet,请!”

类方法

现在,让我们看看我们可以用 BitSet 做的一些很酷的事情。这些就像你可以用弹珠袋的不同玩法:

方法 描述
void set(int bitIndex) 将指定索引处的位设置为 true
void clear(int bitIndex) 将指定索引处的位设置为 false
boolean get(int bitIndex) 返回指定索引处位的值
void and(BitSet set) 对这个 BitSet 和指定的 BitSet 执行逻辑 AND 操作
void or(BitSet set) 对这个 BitSet 和指定的 BitSet 执行逻辑 OR 操作
void xor(BitSet set) 对这个 BitSet 和指定的 BitSet 执行逻辑 XOR 操作
int cardinality() 返回此 BitSet 中设置为 true 的位数
boolean isEmpty() 如果此 BitSet 不包含设置为 true 的位,则返回 true
int length() 返回此 BitSet 的“逻辑大小”

让我们看看其中的一些行动:

BitSet myBitSet = new BitSet(8);

// 设置一些位
myBitSet.set(0); // 将第一个位设置为 true
myBitSet.set(3); // 将第四个位设置为 true

System.out.println("设置位后的 BitSet: " + myBitSet);

// 检查一个位
boolean isSet = myBitSet.get(3);
System.out.println("第3位设置了? " + isSet);

// 清除一个位
myBitSet.clear(0);
System.out.println("清除第0位后的 BitSet: " + myBitSet);

// 检查基数(设置的位数)
int setbits = myBitSet.cardinality();
System.out.println("设置的位数: " + setbits);

在这个例子中,我们像操作一排开关一样操作我们的 BitSet。我们打开一些(设置),检查它们是否打开(获取),关闭一些(清除),并计算打开了多少个(基数)。

继承的方法

BitSet 类还从其父类继承了一些方法。这就像用你的弹珠袋获得一些额外的工具。这些包括来自 java.lang.Object 的方法,如 clone()、equals() 和 hashCode()。你可以像使用其他 Java 对象一样使用这些方法。

创建 BitSet 并对 BitSets 执行操作示例

现在,让我们用一个有趣的例子把它们放在一起。我们将创建两个 BitSets 并对它们执行一些操作:

import java.util.BitSet;

public class BitSetFun {
public static void main(String[] args) {
// 创建两个 BitSets
BitSet bitSet1 = new BitSet(8);
BitSet bitSet2 = new BitSet(8);

// 在 bitSet1 中设置一些位
bitSet1.set(0);
bitSet1.set(2);
bitSet1.set(4);
bitSet1.set(6);

// 在 bitSet2 中设置一些位
bitSet2.set(1);
bitSet2.set(2);
bitSet2.set(3);
bitSet2.set(5);

System.out.println("BitSet1: " + bitSet1);
System.out.println("BitSet2: " + bitSet2);

// 执行 AND 操作
BitSet andResult = (BitSet) bitSet1.clone();
andResult.and(bitSet2);
System.out.println("AND 结果: " + andResult);

// 执行 OR 操作
BitSet orResult = (BitSet) bitSet1.clone();
orResult.or(bitSet2);
System.out.println("OR 结果: " + orResult);

// 执行 XOR 操作
BitSet xorResult = (BitSet) bitSet1.clone();
xorResult.xor(bitSet2);
System.out.println("XOR 结果: " + xorResult);
}
}

输出

运行这个程序时,你会看到类似这样的东西:

BitSet1: {0, 2, 4, 6}
BitSet2: {1, 2, 3, 5}
AND 结果: {2}
OR 结果: {0, 1, 2, 3, 4, 5, 6}
XOR 结果: {0, 1, 3, 4, 5, 6}

让我们来解释一下:

  1. 我们创建两个 BitSets 并在每个中设置一些位。
  2. AND 操作只保留在两个 BitSets 中都设置的位(在这种情况下,只有第2位)。
  3. OR 操作保留在任一 BitSet 中设置的位。
  4. XOR 操作保留在一个 BitSet 中设置但在另一个中未设置的位。

想象一下,你和你的朋友每个人都有一套彩色弹珠。AND 操作就像只保留你们两个都有的颜色。OR 操作就像结合你所有的弹珠。XOR 操作就像只保留一个有你没有的颜色。

就这样!你已经迈出了 Java 中 BitSet 世界的第一步。记住,熟能生巧,所以不要害怕实验这些概念。谁知道呢?你可能会发现自己在未来使用 BitSet 解决一些非常酷的问题!

快乐编码,愿你的位总是设置正确!?

Credits: Image by storyset