有效地比较位集

时间:2010-02-15 13:02:50

标签: java performance bit-manipulation

我希望将权限存储在一个位集中,以便在Java中有效地比较它们。 1表示授予许可,0表示拒绝。如果执行授权,则会将所需权限与权限集进行比较。

我的想法是使用AND并将结果与​​请求的权限进行比较。

示例:

     0010 1101 Granted Permissions
AND  0000 0101 Requested Permissions
=    0000 0101 Result

if (Result == Requested Permissions)
    allow
else
    deny

这可以更高效或更简单吗?

3 个答案:

答案 0 :(得分:5)

我将专注于“简单”部分,因为我认为此操作不会成为任何严肃应用程序中的性能瓶颈。

您可以使用具有所有必要操作的BitSet

更加面向对象的方法,更易于理解和阅读,是使用enum表示您的权限并使用EnumSet。对于只有少量值的枚举,它将与BitSet一样高效,因为它将使用非常类似的实现。

答案 1 :(得分:2)

如果您使用的是Java 5或更高版本,我建议您使用EnumEnumSet。它更容易处理,AFAIK表现同样出色。

答案 2 :(得分:1)

您的方法非常好,并且可以按预期工作。当然,你可以用几种更复杂的方式做到这一点,但是如果上下文适合你的情况,我认为使用位操作运算符并没有错。所有这些运算符都是Java核心语言的一部分,并且未标记为 @deprecated @evil