關於 skiplist (跳表)的一些資料梳理
skiplist(譯為跳表,又稱跳躍表);
跳躍列表是一種資料結構。它允許快速查詢乙個有序連續元素的資料鏈表。跳躍列表的平均查詢和插入時間複雜度都是o(log n)
,優於普通佇列的o(n)。
快速查詢是通過維護乙個多層次的鍊錶,且每一層鍊錶中的元素是前一層鍊錶元素的子集。一開始時,演算法在最稀疏的層次進行搜尋,直至需要查詢的元素在該層兩個相鄰的元素中間。這時,演算法將跳轉到下乙個層次,重複剛才的搜尋,直到找到需要查詢的元素為止。跳過的元素的方法可以是隨機性選擇或確定性選擇,其中前者更為常見。
跳躍列表由威廉·普發明。發明者對跳躍列表的評價是:「跳躍列表是在很多應用中有可能替代平衡樹
而作為實現方法的一種資料結構。跳躍列表的演算法有同平衡樹一樣的漸進的預期時間邊界,並且更簡單、更快速和使用更少的空間。」
– 摘自維基百科
skip list(跳躍表)是一種支援快速查詢的資料結構,插入、查詢和刪除操作都僅僅只需要o(log n)對數級別的時間複雜度,它的效率甚至可以與紅黑樹等二叉平衡樹相提並論,而且實現的難度要比紅黑樹簡單多了。
– 摘自掘金
跳躍列表是一種隨機化資料結構,基於併聯的鍊錶,其效率可比擬二叉查詢樹。
對於有序鍊錶
,查詢的時間複雜度為o(n),儘管真正的插入與刪除操作節點複雜度只有o(1),但都需要先查詢
到節點的位置,可以說是查詢拉低了有序鍊錶的效能。
skiplist採用「空間換時間
」的思想,除了原始鍊錶外還儲存一些「跳躍」的鍊錶,達到加速查詢的效果。
concurrentskiplistmap
concurrentskiplistmap提供了一種執行緒安全
的併發訪問的排序對映表。內部是skiplist(跳表)結構實現,在理論上能夠o(log(n))時間內完成查詢、插入、刪除操作。
SkipList跳表記錄一下
節點擁有鍵和值,並按排序單獨鏈結順序,可能帶有一些中間的標記節點。清單是以可作為head.node訪問的虛擬節點為首。值字段僅宣告為object,因為它需要特殊的非v標記和標頭節點的值。static final class node 索引節點代表跳過列表的級別。注意即使節點和索引都具有前向指向字段,...
關於RemoteView 的一些字型的一些問題
最近在做乙個 在notification 新增 天氣通知的小部分 發現困擾在 如何給 remoteview 中的字型 作修改 大家都知道 textview 設定字型 在xml 中 可以 設定 3種 而其他字型的設定 需要通過 typeface 去設定 具體 將字型放置在asset 資料夾中 type...
關於Thread的一些
執行緒有幾種狀態 1.產生 new 執行緒已經產生,只是放在記憶體中啥事都不幹。2.可執行 runnable 在呼叫了start方法到它獲得系統給它分配了時間片之前,或者時間片用完了但還沒執行完。3.執行 running 獲得了時間片,正在執行。4.死亡 dead 執行完成 5.阻塞 block 不...