深度解密Go語言之map

2021-10-01 21:40:56 字數 685 閱讀 5197

1、實現map最主要的資料結構有兩種:雜湊查詢表(hashtable)、 搜尋樹(searchtree)。go語言的map採用雜湊查詢表實現。

2、雜湊查詢表一般會存在「碰撞」的問題。有兩種常用解決辦法:鍊錶法和開放位址法。go語言採用的是鍊錶法。

3、自平衡搜尋樹法的最差搜尋效率是 o(logn),而雜湊查詢表最差是 o(n)。當然,雜湊查詢表的平均查詢效率是 o(1),如果雜湊函式設計的很好,最壞的情況基本不會出現,所以可以認為雜湊查詢表的效率是o(1)。還有一點,遍歷自平衡搜尋樹,返回的 key 序列,一般會按照從小到大的順序;而雜湊查詢表則是亂序的(go語言的map不保證每次遍歷的順序相同)。

4、選擇 hash 函式主要考察的是兩點:效能、碰撞概率。

5、go map 的擴容採取了一種稱為「漸進式」地方式,原有的 key 並不會一次性搬遷完畢。

6、觸發擴容的條件:

1、裝載因子超過閾值,原始碼裡定義的閾值是 6.5。

2、overflow 的 bucket 數量過多。裝滿的桶數量過多。

7、float 型可以作為 key,但是由於精度的問題,會導致一些詭異的問題,慎用之。

package main

import

("fmt"

"math"

)func

main()

參考:

深度解密Go語言之unsafe

限制一 go的指標不能進行數 算。來看乙個簡單的例子 a 5p a p p a 3上面的 將不能通過編譯,會報編譯錯誤 invalid operation,也就是說不能對指標做數 算。限制二 不同型別的指標不能相互轉換。例如下面這個簡短的例子 func main 也會報編譯錯誤 cannot use...

go語言之 map集合

map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的 下面看具體例項 pac...

Go語言之Map的使用(十五)

map是go的內建型別,它使用鍵值對的方式來檢索值 乙個鍵對應乙個值 可以使用內建函式 make 也可以使用 map 關鍵字來定義 map 宣告變數,預設 map 是 nil var map variable map key data type value data type 使用 make 函式 ...