我刚刚发现java中有BitSet。已经有数组和类似的数据结构。哪里可以使用BitSet?
由于上面的答案仅解释了 BitSet 是什么,我在这里提供了有关如何使用 BitSet 以及原因的答案。起初,我不知道 BitSet 结构存在。我在 C++ 中有一个二维码生成器,出于灵活的原因,我不想使用特定的位图结构将此二维码返回给调用者。二维码只是黑白的,可以表示为一系列位。问题是在 JNI C++ 中,我必须返回表示这些位序列的字节数组,然后我必须返回位的计数。请注意,仅字节数组的大小无法判断位数。实际上,我面临着一个场景,其中我的 JNI C++ 必须返回两个值:
我的第一个解决方案是返回一个布尔数组。这个数组的内容是二维码像素,数组长度的平方根就是边长。当然这行得通,但我觉得浪费了,因为它应该是一系列位。我的下一次尝试是返回Pair<int, byte[]>
对象,经过大量的头发拉扯后,我无法使其在 C++ 中工作。BitSet(145)
构造来了。通过返回这个BitSet
对象,我传达了上面列出的两种类型的信息。但有一个小技巧。如果二维码像素总共有144个像素,因为一侧是12个,那么你必须分配BitSet(145)
并执行obj.set(144)
. 也就是说,我们引入了一个我们随后设置的人工最后一位,但最后一位不是二维码像素的一部分。这确保,BitSet::length()
正确返回位计数。所以在 Kotlin 中:
var pixels:BitSet = getqrpixels(inputdata)
var pixels_len = pixels.length() - 1
var side = sqrt(pixels_len.toFloat()).toInt()
drawSquareBitmap(pixels, side)
因此,这是我对这个神秘的BitSet 的意外用例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句