Android中SparseArray源碼分析完結(jié)【增(改)、刪、查】

一、put操作的分析:

array擴(kuò)容的邏輯:

clipboard.png

將一個(gè)新元素 element 添加到數(shù)組中特定的 index 上面:

1)判斷 array 如果不需要擴(kuò)容,則直接通過 System.arraycopy 進(jìn)行數(shù)組的移位,然后插入目標(biāo)數(shù)組
2)若需要擴(kuò)容, 則通過 Array.newInstance(array.getClass().getComponentType(), growSize(currentSize) 進(jìn)行新數(shù)組的創(chuàng)建


clipboard1.png

SparseArray中的 put 方法調(diào)用:

1) key 已經(jīng)存在 mKeys 中,則直接將 mValues 對(duì)應(yīng)的值進(jìn)行設(shè)置
2)如果沒有找到,則對(duì) ~i 的位置進(jìn)行確定 mValues 是否已經(jīng)被 DELETED , 如果是,則可以把 key 、value 插入對(duì)應(yīng)的位置
3)如果設(shè)置了 mGarbage 且 總數(shù)已經(jīng)超了 mKeys 數(shù)組的大小,則進(jìn)行數(shù)組壓縮
4)通過 GrowingArrayUtils 進(jìn)行數(shù)組的擴(kuò)容并插入對(duì)應(yīng)的 key


clipboard2.png

其中 gc()的邏輯為:根據(jù) mValues 中對(duì)象是否存在,來進(jìn)行數(shù)組的壓縮整理

clipboard3.png

二、get操作 (注意valueAt() 并不是通過 key 來查找對(duì)應(yīng)的 value 方式)

clipboard4.png

對(duì) mKey 進(jìn)行二分查找:在 mKeys 對(duì) key 存儲(chǔ)的位置進(jìn)行二分查找

1)查詢到,則返回對(duì)應(yīng)的 index
2)查詢不到,則返回二分查找最后index的下標(biāo)(以 ~ 的方式來返回,一般均為負(fù)數(shù),用來和查詢到進(jìn)行區(qū)分),便于在上層處理中,再進(jìn)行一次 ~ 運(yùn)算,獲取到應(yīng)該將元素插入到什么位置


clipboard5.png

三、delete 操作:(注意區(qū)分 removeAt 與 remove 的關(guān)系 )

并不會(huì)直接將對(duì)應(yīng)的 mValues 中 i 位置的元素設(shè)置為 null, 而是設(shè)置為 DELETED, 用于后續(xù) mKeys 數(shù)組的壓縮

clipboard7.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對(duì)于byte類型而言...
    龍貓小爺閱讀 4,475評(píng)論 0 16
  • 內(nèi)存優(yōu)化前我們先了解一些和內(nèi)存相關(guān)的概念: 垃圾回收 內(nèi)存抖動(dòng) 四種引用 內(nèi)存泄露 下面我們回到正題, 講一下如何...
    MZzF2HC閱讀 1,861評(píng)論 0 6
  • 本系列出于AWeiLoveAndroid的分享,在此感謝,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺,完善答案。以成系統(tǒng)。 Java基...
    濟(jì)公大將閱讀 1,627評(píng)論 1 6
  • 怎么形容遇見你呢 就像夏日悶熱午后 突如其來的一場雨 驚慌失措的同時(shí) 大概更多的是欣喜吧
    li艾chun閱讀 252評(píng)論 1 3
  • 設(shè)置學(xué)習(xí)率alpha很重要,感覺隨機(jī)梯度下降不容易收斂。
    Jerrybio閱讀 274評(píng)論 0 1

友情鏈接更多精彩內(nèi)容