Golang map 如何進行刪除操作?
阿新 • • 發佈:2018-12-03
Cyeam 關注 2017.11.02 10:02* 字數 372 閱讀 2784評論 0喜歡 3
map 的刪除操作
Golang 內建了雜湊表,總體上是使用雜湊連結串列實現的,如果出現雜湊衝突,就把衝突的內容都放到一個連結串列裡面。
Golang 還內建了delete
函式,如果作用於雜湊表,就是把 map 裡面的 key 刪除。
map 的刪除原理
可以直接看原始碼。
我簡單摘幾行:
外層的迴圈就是在遍歷整個 map,刪除的核心就在那個empty
如何清空整個 map
看了我上面的分析,那麼這段程式碼可以清空 map 麼?
- map 被清空。執行完之後呼叫
len
函式,結果肯定是0; - 記憶體沒有釋放。清空只是修改了一個標記,底層記憶體還是被佔用了;
- 迴圈遍歷了
len(m)
次。上面的程式碼每一次遍歷都會刪除一個元素,而遍歷的次數並不會因為之前每次刪一個元素導致減少。
如何真正釋放記憶體?
map =nil
這之後坐等垃圾回收器回收就好了。
如果你用 map 做快取,而每次更新只是部分更新,更新的 key 如果偏差比較大,有可能會有記憶體逐漸增長而不釋放的問題