Java 为什么位集允许不同于1和0的值?
我试着学习java中的Java 为什么位集允许不同于1和0的值?,java,bitset,Java,Bitset,我试着学习java中的BitSetcollection。我已经读到它在内部使用位 位集的每个*组件都有一个{@code boolean}值 我写了一个小应用程序: BitSet bitSet = new BitSet(); bitSet.set(9); bitSet.set(5); bitSet.set(3); System.out.println(bitSet); System.out.println(Arrays.toString(bitSet.toByteArray())); 我想知道我
BitSet
collection。我已经读到它在内部使用位
位集的每个*组件都有一个{@code boolean}值
我写了一个小应用程序:
BitSet bitSet = new BitSet();
bitSet.set(9);
bitSet.set(5);
bitSet.set(3);
System.out.println(bitSet);
System.out.println(Arrays.toString(bitSet.toByteArray()));
我想知道我可以把值设置为不同于1和0
此外,我不理解输出:
{3, 5, 9}
[40, 2]
请向我解释此集合的用法?将指定索引处的位设置为true
SobitSet.set(9)代码>将位号9翻转为1
关于输出:
System.out.println(位集)代码>根据JavaDoc打印结果:
对于此位集包含处于集合状态的位的每个索引,该索引的十进制表示形式将包含在结果中。
Arrays.toString(bitSet.toByteArray())
打印位集李>
它一步一步地拆分二进制集:1000101000
至字节:10 00101000
它是十进制的2和40。您可以设置位号3、5和9:
byte# 1 0
index … 9 8 7 6 5 4 3 2 1 0
value … 1 0 0 0 1 0 1 0 0 0
二进制10
是十进制2
(2ü=2)
二进制00101000
是十进制40
(2³+2⁵ = 8+32=40)。位集
逻辑上表示“根据需要增长的位向量”()
通过new BitSet()
创建它时,所有位都设置为0(false)
使用设置(x)
将位置x处的位设置为1(真)(其中第一个位置为0);e、 g.在代码中启用位3、5和9
0 5 10
| | |
000101000100...
toString()
报告设置为1的位列表,即示例中的3、5和9
toByteArray()
将位集的内容转换为字节
值序列,每个值包含8个连续位的值,以小尾端顺序排列(即从位集中的最小索引开始)。示例中的输出{40,2}
来自:
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal
7 0 15 8无意冒犯-但我希望6k+用户知道如何查找oracle文档以获取集合类,阅读并理解它…@Fildor我在本页的引用,正如您所见,这并没有让它变得更好。你为什么不明白这些文件?我们怎样才能给你更多更好的解释呢?对我来说这很清楚。“我只是想知道为什么它不适合你。”菲尔多我读了《医生》,但不明白。我相信这对这种情况来说是很合适的,但如果你能确切地知道你在挣扎什么,那将是很有帮助的。否则,人们会或多或少地重复这些文档,这是您不理解的。@gstackoverflow一个字节的宽度是8位。因此,2^9在第二个字节中结束,因此在索引为1的字节中,这将是00000010=>2。@gstackoverflow,请添加注释,而不是直接修改用户答案,尤其是当您还不理解内容时:您删除了8和7之间的有意义的空格:附加问题:当我声明位集位=新位集时(8)
然后我就可以毫无问题地执行位.set(15);
或检索位.get(85);
(我知道这有点夸张,但只是为了说明这一点)。在位集.java
中查看公共无效集(int-bitIndex)
的实现时,我只看到索引为负时抛出的异常(足够公平)。但是,当您超过构造函数中设置的最大位数时,为什么不呢?我还看到构造函数公共位集(int nbits)
没有保存本地变量来跟踪在构造函数中传递的位数…@GeertVc传递给新位集(N)的N
类似于位集的估计大小,用于分配内部位存储。如果设置的位超过此大小,则位集必须扩展内部存储以分配它,但它仍然允许这样做。这一原理也用于其他java.util
集合类,例如new ArrayList(10)
创建一个最初由大小为10的数组支持的列表,但仍然允许添加10个以上的元素,如有必要,分配一个更大的数组。
7 0 15 8 <- position in BitSet
| | | |
{00101000 , 00000010} <- toByteArray(), binary
| |
{ 40 , 2 } <- toByteArray(), decimal