linkedhashmap 排序模式
/**
* initialcapacity 初始容量
* loadfactor 達到該百分比就擴容map
* 排序模式:true為訪問順序 false為插入順序
*/public
linkedhashmap(int initialcapacity,
float loadfactor,
boolean accessorder)
public
lrucache(int maxsize)
this.maxsize = maxsize;
this.map = new linkedhashmap(0, 0.75f, true);
}// 返回最舊的資料
public map.entryeldest()
public final v put(k key, v value)
v previous;
synchronized (this)
}if (previous != null)
// lru 核心方法
trimtosize(maxsize);
return previous;
}
//移除超過maxsize資料
public
void
trimtosize(int maxsize)
// 未超過限制不處理
if (size <= maxsize)
//獲取最舊的資料
map.entrytoevict = map.eldest();
if (toevict == null)
key = toevict.getkey();
value = toevict.getvalue();
// 移除該最舊的資料
map.remove(key);
// size-- 更新size
size -= safesizeof(key, value);
evictioncount++;
}entryremoved(true, key, value, null);
}}
public
final v get(k key)
v mapvalue;
synchronized (this)
misscount++;
}// 嘗試新建乙個(不明覺厲)
v createdvalue = create(key);
if (createdvalue == null)
synchronized (this) else
}if (mapvalue != null) else
}
public
final v remove(k key)
v previous;
synchronized (this)
}if (previous != null)
return previous;
}
Android 快取機制與實現
android開發本質就是手機和網際網路中的web伺服器之間進行通訊,就必然要從服務端獲取資料,而反覆通過網路獲取資料比較耗時,特別是訪問較多的時候,會極大的影響效能,android中可通過二級快取來減少頻繁的網路操作,減少流量,提高效能。二級快取工作機制 當android端獲得資料時比如獲取網路中...
解析Android快取機制 LruCache
一般來說,快取策略主要包含快取的新增 獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快取呢?這是因為不管是記憶體快取還是硬碟快取,它們的快取大小都是有限的。當快取滿了之後,再想其新增快取,這個時候就需要刪除一些舊的快取並新增新的快取。因此lru least recentl...
徹底解析Android快取機制 LruCache
關於android的 快取,其中主要的就是記憶體快取和硬碟快取。這兩種快取機制的實現都應用到了lrucache演算法,今天我們就從使用到原始碼解析,來徹底理解android中的快取機制。一般來說,快取策略主要包含快取的新增 獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快...