ArrayMap原始碼閱讀

2021-06-22 20:13:11 字數 672 閱讀 1276

android原始碼中的乙個map(實現的map介面),號稱能夠比hashmap更省記憶體。因為hashmap是鏈式位址解決衝突,但是有乙個叫entry的類,佔了一定空間。key value也是用物件來表示的。

有乙個很重要的是,arraymap根本不是雜湊表,hash值只是個標記,這根本就是乙個二叉查詢樹。有兩個陣列:key值陣列,與物件陣列的下標對應,key值可重複,且有序排列;物件陣列,儲存真正的鍵值對,偶數下標是key,奇數是value。

0.為了快速擴充套件陣列空間,使用了static的array cache。結構是[[[...], int], int]。cache[0]指向下乙個陣列,cache[1]是被快取的陣列。

1.搜尋使用containerhelpers中的二分搜尋,並對有相同hash值的前後物件進行比較。

2.clear歸還了記憶體,erase只是清空內容。

大google的猿確實思考的要多一些,很注意細節,把一干class和物件省掉了,代價就是**可讀性大降。其實,很多時候,物件的陣列可以用多個filed的陣列來實現,這是這個實現方法的基本原理吧。

摘要:0. 100量級的資料,arraymap效能不會差太多

1. 資料很少時,arraymap僅占用o(資料量)的資料量,hashmap的entry array大小不會改變,占用空間

2. arraymap可以使用index遍歷,會快一些

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

原始碼閱讀 Glide原始碼閱讀之load方法(二)

原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...