LruCache算法就是Least Recently Used贰剥,也就是最近最少使用算法。
????????他的算法就是當(dāng)緩存空間滿了的時(shí)候,將最近最少使用的數(shù)據(jù)從緩存空間中刪除以增加可用的緩存空間來緩存新內(nèi)容横漏。
????????這個(gè)算分的內(nèi)部有一個(gè)緩存列表蚂蕴。每當(dāng)一個(gè)緩存數(shù)據(jù)被訪問的時(shí)候低散,這個(gè)數(shù)據(jù)就會被提到列表頭部俯邓,每次都這樣的話,列表的尾部數(shù)據(jù)就是最近最不常使用的了熔号,當(dāng)緩存空間不足時(shí)稽鞭,就會刪除列表尾部的緩存數(shù)據(jù)。
內(nèi)部的原理是用到了LinkedHashMap(雙向循環(huán)鏈表數(shù)據(jù)結(jié)構(gòu)):
為什么要用LinkedHashMap來存緩存呢引镊,這個(gè)跟算法有關(guān)朦蕴,LinkedHashMap剛好能提供LRUCache需要的算法。
這個(gè)集合內(nèi)部本來就有個(gè)排序功能弟头,當(dāng)?shù)谌齻€(gè)參數(shù)是true的時(shí)候吩抓,數(shù)據(jù)在被訪問的時(shí)候就會排序,這個(gè)排序的結(jié)果就是把最近訪問的數(shù)據(jù)放到集合的最后面赴恨。到時(shí)候刪除的時(shí)候就從前面開始刪除疹娶。
LinkedHashMap cache =new LinkedHashMap(100,0.75F,true);