Java LinkedHashMap原始碼解讀

2021-07-10 18:49:44 字數 1433 閱讀 1711

map

介面的雜湊表和鏈結列表實現,具有可預知的迭代順序。此實現與 

hashmap

的不同之處在於,後者維護著乙個執行於所有條目的雙重鏈結列表。此鏈結列表定義了迭代順序,該迭代順序通常就是將鍵插入到對映中的順序(

插入順序

)。注意,如果在對映中

重新插入

鍵,則插入順序不受影響。(如果在呼叫

m.put(k, v)

前 m.containskey(k)

返回了 

true

,則呼叫時會將鍵 

k重新插入到對映 

m中。)

提供特殊的

構造方法來建立鏈結雜湊對映,該雜湊對映的迭代順序就是最後訪問其條目的順序,從近期訪問最少到近期訪問最多的順序(

訪問順序

)。這種對映很適合構建 lru 快取。

由於增加了維護鏈結列表的開支,其效能很可能比 

hashmap

稍遜一籌,不過這一點例外:

linkedhashmap

的 collection 檢視迭代所需時間與對映的

大小成比例。

hashmap

迭代時間很可能開支較大,因為它所需要的時間與其

容量成比例。

鏈結的雜湊對映具有兩個影響其效能的引數:

初始容量

和載入因子

。它們的定義與 

hashmap

極其相似。要注意,為初始容量選擇非常高的值對此類的影響比對

hashmap

要小,因為此類的迭代時間不受容量的影響。

此實現不是同步的。

map m = collections.synchronizedmap(new linkedhashmap(...));
在按插入順序鏈結的雜湊對映中,僅更改與對映中已包含鍵關聯的值不是結構修改。

在按訪問順序鏈結的雜湊對映中,僅利用 get 查詢對映不是結構修改。

public class linkedhashmap

extends hashmap

implements map

繼承hashmap類,實現map介面。

public linkedhashmap()
由構造方法可知,其呼叫父類構造方法。

void init()

初始化鍊錶結構 

public boolean containsvalue(object value)  else 

return false;

}

通過鍊錶的形式來訪問,是否包含某個元素。

public void clear()
呼叫父類的clear方法,同時修改鍊錶結構。

azkaban web server原始碼解析

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Redux原始碼createStore解讀常用方法

const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...