美文网首页
BitSet 为啥要选择ADDRESS_BITS_PER_WOR

BitSet 为啥要选择ADDRESS_BITS_PER_WOR

作者: 老鼠抗大枪 | 来源:发表于2019-07-29 15:16 被阅读0次

通过查看BitSet 源码可以发现其设置ADDRESS_BITS_PER_WORD默认为6.但是为什么呢?

首先BitSet内置的底层数据为long数组,阅读set(int bitIndex)发现,其首先通过bitIndex >> ADDRESS_BITS_PER_WORD找到wordIndex,然后通过 words[wordIndex] |= (1L << bitIndex); // Restores invariants来设置对应的数值位。

一个long 8字节,64位。1<<1是2,1<<65也是2.也就是说1右移动64+位就会超过long大小,导致重复。因此ADDRESS_BITS_PER_WORD最多为6。

假设ADDRESS_BITS_PER_WORD超过6设置为7 ,比如1和65对应的wordIndex都是0,但是1<<1和1<<65同样的值,则set(1)和set(65)冲突。导致问题。

综上所述由于底层数据结构为long数组,ADDRESS_BITS_PER_WORD最大能够设置为6

相关文章

  • BitSet 为啥要选择ADDRESS_BITS_PER_WOR

    通过查看BitSet源码可以发现其设置ADDRESS_BITS_PER_WORD默认为6.但是为什么呢? 首先Bi...

  • bitset

    首先看看bitset的定义: A bitset stores bits (elements with only t...

  • 为啥要选择读书

    大家都说读书苦,我们来看看不读书的人生究竟有多残酷。 香港富豪田北辰曾在一档节目中当过两天的环卫工。体验开始前呢,...

  • JAVA集合类

    Vector,BitSet,Stack,Hashtable

  • bitset(位图)原理与用法

    分享自我的微信订阅号“猿in”,可以搜索关注。 Bitset基础 介绍 bitset(bitmap)也就是位图,由...

  • BitSet

    题目: 有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来...

  • BitSet

  • Java Bitset类

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

  • BitSet实现原理及源码解析

    BitSet的结构原理 BitSet, 是Java对位集合抽象出的一种数据结构。它的内部维护了一个long数组,数...

  • JavaSE学习笔记——基本数据结构

    BitSet类BitSet,也就是位图,可以用比较紧凑的格式来表示给定范围的连续数据,最常见的应用就是那些需要对海...

网友评论

      本文标题:BitSet 为啥要选择ADDRESS_BITS_PER_WOR

      本文链接:https://www.haomeiwen.com/subject/baubrctx.html