Java LinkdListに基づいて、Android大データキャッシュポリシーを実現します。

3432 ワード

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(); // } // } }