Java容器(Java複習一)

2021-09-11 01:55:34 字數 978 閱讀 8906

lru與lfu

set:無序的,唯一的

hashmap在jdk1.7的資料結構是hash表+鍊錶,而在jdk1.8中做了優化,當鍊表長度達到8時,將鍊錶轉換為紅黑樹進行儲存。如下圖:

插入值的操作:首先計算key值的hash值,得到的計算結果為陣列下標在hashtable中查詢,檢視對應位置是否有值,若無值則進行插入,若有值,檢視key值是否相等,相等則覆蓋,不相等則檢視是否為鍊錶,且鍊錶的長度是否小於等於8,未達到則在鍊錶後插入,若達到了則將鍊錶轉換為紅黑樹進行插入。具體檢視下圖:

通過執行緒安全的集合,如vector和hashtable,效率較低,原因是在每個運算元據的方法上加入了synchronized欄位,加鎖的範圍過大導致效率低下

通過collectionutils.synchronizedcollection方法來裝飾集合,在運算元據的方法上加入了synchronized欄位,加鎖的範圍過大導致效率低下

使用juc包下的執行緒安全類,縮小加鎖的範圍,且通過自旋的方式來進行加鎖,通過cpu計算來換取阻塞和喚醒的時間

1.使用兩個指標,乙個步長為1的慢指標,乙個步長為2的快指標,從頭節點進行遍歷,若兩個指標相遇,則有環。原因是進入環後,兩者步長相差1,所以進入環內後,快指標能夠追上慢指標

慢指標和快指標第一次相遇的點,慢指標進行遍歷,遍歷到相遇點後的步長就是環大小

慢指標和快指標第一次相遇的點,慢指標和快指標同時遍歷,下次相遇時走過的步長就是環大小,原因是兩者步長差1

快指標從慢指標和快指標第一次相遇的點以步長為1出發,慢指標從頭結點出發,相遇的點就是環的入口,推導過程參看鍊錶找出環的入口

兩種常見的快取淘汰演算法lfu&lru

lru和lfu快取置換演算法

Java繼承複習(一)

繼承中成員變數的關係,依據就近原則,子類中有該成員變數時,使用子類的,沒有則使用父類的 繼承中的成員方法 a.不同名方法 b.同名方法 優先會使子類的方法 重寫 覆蓋 關於方法的重寫 子父類出現了一模一樣的方法 應用 當子類需要父類的功能,而功能主體子類有自己的特有內容,可以重寫父類中的方法 注意 ...

Java複習 介面

1.介面的概念 1 介面是一組行為的規範 定義,沒有實現 2 使用介面,可以讓我們的程式更加利於變化 3 介面是物件導向程式設計體系中的思想精髓之一 4 物件導向設計法則 基於介面程式設計 2.介面的定義 1 介面的定義格式 inte ce 介面名稱 示例 inte ce hit 介面實現 clas...

java容器總結

容器大體分為兩類 collection和map。區別 1 collection中儲存了一組物件,而map儲存鍵值對。2 collection的子類都實現了iterator這個方法,該方法能返回乙個iterator物件。collection的具體實現包括list和set。區別 1 list是有序的,元...