1.定義:
2.與其他集合類區別:
3.enumset作為集合類基本操作方法實現原理(位運算):
說明:
3.1 add方法
public boolean add(e e)
ordinal()
為每個列舉項的序號,從0開始
,按宣告順序排列,如[red,blue,yellow,black]
對應[0,1,2,3]
;1l << ((enum<?>)e).ordinal()
(為了方便,這裡稱之為列舉值
)則表示1*2^(e.ordinal())
,color.red的ordianl()
為0
,對應列舉值
為1*2^0=1
,其實就是第ordinal()+1
位(從右往左數,個位為第1位)為1其它位為0的十進位制數,對應十進位制數為00000001
(這裡假設是8bit,實際是long型32bit);
則每個列舉項表示如下:
列舉項序號
1l << ((enum<?>)e).ordinal()
列舉值
color.red
000000001
1
color.blue
100000010
2
color.yellow
200000100
4
color.black
300001000
8
elements |=
就是對新增的不同元素的列舉值進行求和,相同
元素相或
時保持不變
3.2 remove方法
public boolean remove(object e)
按照之前的列舉值相加
的想法,remove就是從總列舉值
中減去待刪除元素的列舉值
,因為是位運算
,沒有直接相減,使用位操作elements &= ~(1l << ((enum<?>)e).ordinal());
完成相減操作
3.3 contains方法
public boolean contains(object e)
contains方法就更好理解,每個列舉項的列舉值的值都不一樣
,且相互之間
進行相與
操作為0
,使用總列舉值
與要查詢的列舉項的列舉值
進行相與
操作,如果為0
,說明不存在
該列舉項,否則存在
Java原始碼分析之ArrayList
自我學習原始碼,也借鑑了網上其他的資料,有寫的不準確的地方,請輕噴,謝謝 1 繼承自abstractlist類 2 實現了randomaccess介面,randomaccess介面是list 實現所使用的標記介面,用來表明其支援快速 通常是固 定時間 隨機訪問。此介面的主要目的是允許一般的演算法更改...
Java原始碼閱讀之Vector
vector與arraylist區別 protected object elementdata protected int elementcount protected int capacityincrement private static final int max array size int...
Java集合之LinkedList原始碼解析
linkedlist 非執行緒安全的可重複元素順序列表 繼承abstractsequentiallist 其父類為abstractlist 骨架實現,該類要求子類必須重寫listiterator int index 方法 abstract list已提供骨架實現 實現了cloneable,實現淺轉殖...