【Java】深入了解下Java Bitset

2025-03-25T14:41:50+08:00 | 3分钟阅读 | 更新于 2025-03-25T14:41:50+08:00

Macro Zhao

【Java】深入了解下Java Bitset

推荐超级课程:

@TOC

引言

如果你曾经认为Java的BitSet只是一个被美化的布尔数组,那你并不孤单。我以前也这么想,直到我窥视了它的内部结构。我所发现的是相当令人惊讶的,如果你也感到好奇,那么接下来的内容将会是一场盛宴。让我们深入探讨为什么BitSet比看起来要酷得多。

如果Java Bitset不是布尔数组,那它是什么?

Java BitSet远不止是一个简单的boolean数组。它使用long数据类型的位操作来高效地存储和管理数据。如果这听起来令人困惑,别担心——我们会逐步分解。

位操作

Java中的long是一个64位的数字,这意味着它可以存储64个单独的位。通过位操作,你可以直接控制这每一个位。 例如,要在long变量中设置一个特定的位(假设是第12位),你可以使用或(OR)操作。想象你有一个64位的long变量叫做data,你想将第12位设置为1。你会这样做:

data | 0000000000010000000000000000000000000000000000000000000000000000L

在这里,除了你想要设置的位之外,其他都是0。因此,只有那个位会被更新,而其余的保持不变。 现在,如果你想要检查这个变量中第12位的值,你会使用与(AND)操作:

data & 0000000000010000000000000000000000000000000000000000000000000000L

这将根据该位是否被设置返回0或1。

来自Java Bitset内部的引用

Bitset将所有data 存储在一个long数组中。这会根据客户端的数据需求不断变化 ,就像Java中的大多数集合一样。 如果你想存储第1000位,你首先找到数组中的正确索引。然后,确定哪个特定的位(在那个long中的64位)代表第1000位。一旦你确定了它,就在那个位上执行必要的位操作。

set()

当需要在Bitset中设置某项时,会调用[set()](https://github.com/JetBrains/jdk8u_jdk/blob/master/src/share/classes/java/util/BitSet.java#L442)方法。这个方法首先找出这个位将落入的数组索引。然后,它验证数组是否有必要的容量 来存储它。之后,它简单地使用上面看到的或(OR)操作来设置位。

get()

[get()](https://github.com/JetBrains/jdk8u_jdk/blob/master/src/share/classes/java/util/BitSet.java#L621)操作的工作方式类似。我们首先找出这个位将落入的数组索引 。然后,我们确保这个位置在有效 范围内。如果是的话,我们使用与(AND)操作来提取位值。 BitSet提供了许多附加功能,但为了保持文章的焦点,我们在这里不会深入探讨所有功能。如果你好奇,我鼓励你通过查看源代码来探索其全部功能——这会是一次令人着迷的阅读! Java BitSet远不止是一个花哨的boolean数组——它是一个聪明、高效工具,使得管理位变得非常酷。希望这给了你一窥其内部工作原理的视角,以及为什么它值得探索。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee