我们面临着一个有趣的挑战。我们必须控制对驻留在“容器”中的数据的访问。可能会有数十万个“垃圾箱”。对每个垃圾箱的访问是单独控制的,但限制可能而且可能会重叠。我们正在考虑为每个 bin 分配位掩码中的一个位置(1、2、3、4 等)。
然后,当用户登录系统时,我们会查看他的安全属性并确定他可以查看哪些垃圾箱。利用该信息,我们为该用户构建一个位掩码,其中“设置”位对应于他被允许查看的垃圾箱的标识符。因此,如果他可以看到 bin 1、3 和 4,则他的位掩码将为 1101。
因此,当用户搜索数据时,我们可以查看返回行的 bin 索引,并查看该位是否在其位掩码上设置。如果他的位掩码设置了该位,我们就让他看到该行。我们计划将位掩码存储为BigInteger
在爪哇。
我的问题是:假设索引号没有变得比 Integer.MAX_INT 更大,是BigInteger
位掩码将扩展到数十万个位位置?是否需要永远运行BigInteger.isBitSet(n)
其中 n 可能很大(例如 874,837)?创造这样一个东西需要很长时间吗?BigInteger
?
其次:如果您有其他方法,我很想听听。
如果不经常更改,BigInteger 应该很快。
更明显的选择是BitSet http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html这是专为这类事情设计的。对于查找位,我怀疑性能是相似的。对于创建/修改,使用 BitSet 会更有效。
注意:PaulG 评论说这种差异“令人印象深刻”并且 BitSet 更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)