Golang map 如何進行刪除操作?


 

Cyeam 
2017.11.02 10:02* 字數 372 閱讀 2784評論 0

map 的刪除操作

Golang 內置了哈希表,總體上是使用哈希鏈表實現的,如果出現哈希沖突,就把沖突的內容都放到一個鏈表里面。

Golang 還內置了delete函數,如果作用於哈希表,就是把 map 里面的 key 刪除。

map 的刪除原理

可以直接看源碼

我簡單摘幾行:

外層的循環就是在遍歷整個 map,刪除的核心就在那個empty。它修改了當前 key 的標記,而不是直接刪除了內存里面的數據。

如何清空整個 map

看了我上面的分析,那么這段代碼可以清空 map 么?

  1. map 被清空。執行完之后調用len函數,結果肯定是0;
  2. 內存沒有釋放。清空只是修改了一個標記,底層內存還是被占用了;
  3. 循環遍歷了len(m)次。上面的代碼每一次遍歷都會刪除一個元素,而遍歷的次數並不會因為之前每次刪一個元素導致減少。

如何真正釋放內存?

map =nil

這之后坐等垃圾回收器回收就好了。

如果你用 map 做緩存,而每次更新只是部分更新,更新的 key 如果偏差比較大,有可能會有內存逐漸增長而不釋放的問題。要注意。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM