第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

程序員內(nèi)功之圖片緩存

標(biāo)簽:
Android

说明:

有很多开源的图片缓存库,功能强大的有内存和磁盘存储方式混用的,这里只考虑android自带的LruCache,通过它把LinkedHashMap,HashMap相关知识串起来,这也是面试中常被问到的点。

使用情景:

网络获取图片后,放到内存里,下次使用直接从内存读,不再通过网络获取,这里注意缓存容量和app可用内存的占比。

使用文档:

https://developer.android.com/reference/android/util/LruCache.html

源码位置:

android.util.LruCache.java

LruCache继承自LinkedHashMap继承自HashMap,逐个讲解。

HashMap<K,V>的存储结构为数组(每个位置称之为bucket)+ 链表,K通过算法得到要存到哪个bucked里,如果哈希冲突,且key不相同则放到bucket存储的链表里。说下hash冲突的概念,hash的作用是原空间到另一空间的映射,算法肯定会出现相同的映射值,这就是冲突,对于hashmap,其冲突的意思就是K通过算法后得到的值相同(即存到相同的bucket里)。

LinkedHashMap继承HashMap,即延用HashMap的数据存储结构

对Entry多了层包装,添加双向链表的头尾指针,用来实现排序,排序规则依据accessOrder变量:false:按照插入顺序(默认);true按访问顺序 

说白了就是每次访问的K会放到第一位,这样总有末尾元素,是不经常被访问的,称之为eldest。LruCache的最少使用算法就是依据这个机制实现的。

private static class LinkedHashMapEntry<K,V> extends HashMapEntry<K,V> {

     LinkedHashMapEntry<K,V> before, after;

private transient LinkedHashMapEntry<K,V> header; //head实现双向链表

private final boolean accessOrder;

有了上面的基础,LruCache就很容易理解了,LruCache put一个元素后,调用trimToSize 如果超过maxSize,删除eldest;

 public void trimToSize(int maxSize) {

        while (true) {

            K key;

            V value;

            synchronized (this) {

                if (size < 0 || (map.isEmpty() && size != 0)) {

                    throw new IllegalStateException(getClass().getName()

                            + ".sizeOf() is reporting inconsistent results!");

                }

                if (size <= maxSize) {

                    break;

                }

                Map.Entry<K, V> toEvict = map.eldest();

                if (toEvict == null) {

                    break;

                }

                key = toEvict.getKey();

                value = toEvict.getValue();

                map.remove(key);

                size -= safeSizeOf(key, value);

                evictionCount++;

            }

            entryRemoved(true, key, value, null);

        }

    }

原文链接:http://www.apkbus.com/blog-915931-68368.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消