今天來分析一下jdk linkedhashmap的源**
public class linkedhashmapextends hashmapimplements map
可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大多數方法
,包括構造方法也呼叫了父類hashmap的構造方法:
public linkedhashmap(int initialcapacity, float loadfactor)
public linkedhashmap(int initialcapacity)
public linkedhashmap()
public linkedhashmap(map<? extends k, ? extends v> m)
public linkedhashmap(int initialcapacity,
float loadfactor,
boolean accessorder)
但是昨天在分析hashmap的時候說過hashmap的init方法沒有實現,但是linkedhaqshmap已經對其實現:
void init()
在linkedhashmap中多了乙個accessorder變數,他表示迭代時候的乙個順序,若為true,則按照讀取順序排序(讀得越多越在前,也就最先被迭代),若為false
則按照插入順序排序.從linkedhaqshmap的前4個構造方法可以看出,accessorder預設為false,故按照插入順序進行排序.
public v get(object key)
在這個get方法中要注意recordaccess這個方法:
void recordaccess(hashmapm)
}
這個方法定義在linkedhashmap的內部類entry中,他判斷accessorder屬性,若為true,則執行乙個叫做lru的演算法
該演算法的中文名稱叫做最近最少使用演算法,他通過將剛訪問的entry移除,然後加到header前面,這樣迭代的時候會優先迭代
最近頻繁訪問的entry,從而就改變了迭代的順序
對於put方法,linkedhashmap也實現了父類hashmap沒有實現的recordaccess,並重寫了addentry方法,雖然在linkedhashmap沒有重寫put方法
void addentry(int hash, k key, v value, int bucketindex) else
}
可以看到該方法會刪除最老的乙個元素,removeeldestentry是乙個受保護的方法,用來確定是否滿足刪除條件,可以重寫它實現自己的策略,預設該方法返回false azkaban web server原始碼解析
azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...
Redux原始碼createStore解讀常用方法
const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...
JDk原始碼解析之四 Vector原始碼解析
具體的三個屬性 解釋看圖中注釋。vector沒有採取arraylist臨界值擴容的辦法,而是每次不夠的時候,直接根據capacity的值來增加。具體怎麼增加後面會說。vector的構造方法如下。簡單粗暴,如果呼叫無參建構函式,直接就將初始容量設定成了10,最終在右側的構造方法裡,將陣列的長度設定為1...