6 32 使用EnumSet代替bit屬性設定

2021-09-12 03:13:42 字數 489 閱讀 4202

假設text類是乙個ui控制項,此控制項可以設定各種樣式(style)。一般情況下會使用int型別的常量定義各種樣式,以便可以進行bit運算,如下:

public class text 

}

以下**給text物件同時設定多種樣式:

使用列舉類和enumset可以實現相同的功能,enumset底層使用bit vector表示所包含的多個列舉量,因此效能上與直接使用int常量差不多,如下:

public class text ;

//應用樣式,引數型別為enumset

//............

}}

以下**給text物件同時設定多種樣式:

enumset的缺點在於:截止到jdk6,還沒有很好的方式建立不可變的enumset物件。如果使用collections.unmodifiableset()建立不可變的enumset物件,會影響程式效能

使用Join代替In

我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...

使用exists代替in

select from class a where id in select id from class b select from class a a where exists select from class b b where a.id b.id 分析 上述兩種方法查詢結果一樣,但exist...

使用ThreadPool代替Thread

執行緒的空間開銷 執行緒核心物件。包含上下文資訊。32位系統占用700位元組 執行緒環境塊。包括執行緒的異常處理鏈。32位系統占用4kb 使用者模式棧。儲存方法的引數 區域性變數和返回值 核心模式棧。呼叫作業系統的核心模式函式時,系統會將函式引數從使用者模式棧複製到核心模式棧。32位系統占用12kb...