1. 程式人生 > >golang 實現 key有序map

golang 實現 key有序map

Golang  map實現原理是hash  map(核心元素是桶,key通過雜湊演算法被歸入不同的bucket中),key是無序的,很多應用場景可能需要map  key有序(例如交易所訂單撮合),C++  的stl  map  實現了key有序,實際上是TreeMap是基於樹(紅黑樹)的實現方式,即新增到一個有序列表,在O(log  n)的複雜度內通過key值找到value,優點是空間要求低,但在時間上不如HashMap。    

閒來用go  map  +  slice切片,實現了一套key有序map資料結構,就是空間換時間的玩法,  實質是map  負責存k  v,  slice負責維護k的有序索引位置(查詢key採用的是2分法),實現後贈改刪時間負責度是  O(log2n),  。  
優化的一點思考:實際上主要就是在slice上維護k位置時的增改刪費操作,這時候我們可根據具體應用在2分查詢上下點文章。  例如可能所存的資料結構頻繁操作的節點只有前面一部分,這時候我們可以加個邏輯,操作時slice時先2查詢  slice子集(例如頭部熱點),這樣可能很多增改刪操作在第一時間就解決了,整體效能會有很大提升,  最好根據應用場景來具體分析解決。下面給出程式碼。

原文連結