簡體   English   中英

是否可以在Java中聲明一個1位變量?

[英]Is it possible to declare an 1-bit variable in Java?

我的算法使用了一個龐大的boolean數組,正如我所教導的,每個布爾變量需要1個字節。 無論如何都要聲明一個布爾數組並減少內存使用量,因為我正在處理手機環境。

編輯:我的朋友和我正在討論BitSet是否比普通布爾數組慢。 請澄清一下。 該算法仍然需要性能作為最佳需求。

位集合

該類實現了一個根據需要增長的位向量。 位組的每個組件都有一個布爾值。 BitSet的位由非負整數索引。 可以檢查,設置或清除各個索引位。 一個BitSet可用於通過邏輯AND,邏輯包含OR和邏輯異或運算來修改另一個BitSet的內容。

鏈接到使用booleanBitSet之間的基准

您也可以使用EnumSet 這允許您使用命名位,並且比使用使用索引位的BitSet更友好。

用於枚舉類型的專用Set實現。 枚舉集中的所有元素必須來自單個枚舉類型,該類型在創建集時顯式或隱式指定。 枚舉集在內部表示為位向量。 這種表現非常緊湊和高效。 這個類的空間和時間性能應該足夠好,以允許它作為傳統的基於int的“位標志”的高質量,類型安全的替代品。 如果它們的參數也是枚舉集,即使批量操作(例如containsAll和retainAll)也應該非常快速地運行。

例如

BitSet bs = new BitSet(4);
bs.set(1); // READY
bs.set(3); // LARGE_FLAG
boolean largeFlag = bs.get(1); // LARGE_FLAG
System.out.println("Using BitSet: "+bs);

EnumSet<Settings> settings = EnumSet.noneOf(Settings.class);
settings.add(Settings.READY);
settings.add(Settings.LARGE_FLAG);
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG);
System.out.println("Using EnumSet: "+settings);

版畫

Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]

如果合適,恕我直言EnumSet更清晰。

暫無
暫無

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

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