簡體   English   中英

有效地比較位集

[英]Compare bit sets efficiently

我希望將權限存儲在一個位集中,以便在Java中有效地比較它們。 1表示授予許可,0表示拒絕。 如果執行授權,則將所需權限與權限集進行比較。

我的想法是使用AND並將結果與​​請求的權限進行比較。

例:

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

if (Result == Requested Permissions)
    allow
else
    deny

這可以更有效或更簡單嗎?

我將專注於“簡單”部分,因為我認為這個操作不會成為任何嚴肅應用程序中的性能瓶頸。

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

更容易理解和閱讀的OO方法是使用enum表示您的權限並使用EnumSet 對於只有少量值的枚舉,它將與BitSet一樣BitSet ,因為它將使用非常類似的實現。

如果您使用的是Java 5或更高版本,我建議使用Enum (s)和EnumSet 它更容易處理,AFAIK表現同樣出色。

您的方法非常好,並將按預期工作。 當然,你可以用幾種更復雜的方式做到這一點,但是如果上下文適合你的情況,我認為使用位操作運算符並沒有錯。 在所有這些運算符都是Java核心語言的一部分之后,並沒有標記為@deprecated@evil

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM