1. 程式人生 > >Golang map 如何進行刪除操作?

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 如果偏差比較大,有可能會有記憶體逐漸增長而不釋放的問題

。要注意。