import java.util.HashMap;
import java.util.LinkedList;
/*
* Java LinkedList, Android
* :Zhang Phil
* :http://blog.csdn.net/zhangphil
*
* : : LinkedList , LinkedList 。
* LinkedList( C ) , 、 。
*
* : get() , LinkedList LinkedList 。
* , :1,2,3,4,5。 get 2 , :1,3,4,5,2。
*
* , ( ), 。
* , 5, 5 :a,b,c,d,e,
* f , 5 6 , a, f : b,c,d,e,f
*
* : Android LruCache, ( , Bitmap ) :
* public void put(String key, Object obj);
* public Object get(String key);
* <key,value> 。 : key 。
* */
public class CacheBasedOnLinkedList {
// Capacity
private static int CAPACITY = 30;
private LinkedList<HashMap<String, Object>> mLinkedList;
private final String KEY = "key", VALUE = "value";
public CacheBasedOnLinkedList() {
init();
}
public CacheBasedOnLinkedList(int capacity) {
CAPACITY = capacity;
init();
}
private void init() {
mLinkedList = new LinkedList<HashMap<String, Object>>();
}
// 。
// ! 。
public void ensureCapacity(int capacity) {
if (capacity >= CAPACITY) {
// ,
// Capacity = capacity;
} else {
// ,
while (mLinkedList.size() > capacity) {
HashMap<String, Object> map = mLinkedList.removeFirst();
System.out.println("
-> " + map.get(KEY) + ":"
+ map.get(VALUE));
}
}
CAPACITY = capacity;
System.out.println("
:" + CAPACITY);
}
// <key,value> 。
// , , LinkedList 。
public void put(String key, Object obj) {
if (mLinkedList.size() < CAPACITY) {
} else {
HashMap<String, Object> map = mLinkedList.removeFirst();
System.out.println("
! -> " + map.get(KEY) + ":"
+ map.get(VALUE));
}
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(KEY, key);
map.put(VALUE, obj);
mLinkedList.addLast(map);
System.out.println("
-> " + map.get(KEY) + ":" + map.get(VALUE));
}
// key
// : LinkedList, key key , 。
// LinkedList : 。
public Object get(String key) {
Object obj = null;
for (HashMap<String, Object> map : mLinkedList) {
if (map.get(KEY).equals(key)) {
System.out.println(" ->" + key + ":" + map.get(VALUE));
mLinkedList.remove(map);
mLinkedList.addLast(map);
return map.get(VALUE);
}
}
return obj;
}
// // 。
// private void out() {
// System.out.print(" :");
// for (HashMap<String, Object> map : mLinkedList) {
// System.out.print(map.get(KEY) + ":" + map.get(VALUE) + ",");
// }
// }
// //
// public static void main(String[] args) {
// CacheBasedOnLinkedList cache = new CacheBasedOnLinkedList(2);
//
// Random rand = new Random();
//
// for (int i = 0; i < 100; i++) {
// cache.ensureCapacity(rand.nextInt(100) + 1);
// cache.put(i + "", i);
// cache.get(rand.nextInt(100) + "");
// cache.out();
// }
// }
}