中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

基于Java LinkedList,實現(xiàn)Android大數(shù)據(jù)緩存策略

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
    import java.util.HashMap;  
    import java.util.LinkedList;  
      
    /* 
     * 基于Java LinkedList,實現(xiàn)Android大數(shù)據(jù)緩存策略 
     * 作者:Zhang Phil 
     * 原文出處:http://blog.csdn.net/zhangphil 
     *  
     * 實現(xiàn)原理:原理的模型認為:在LinkedList的頭部元素是最舊的緩存數(shù)據(jù),在LinkedList的尾部是最新的緩存數(shù)據(jù)。 
     * 在一個LinkedList(類型C的鏈表)維護一個存儲堆棧,添加元素時候順序、依次添加。 
     * 
     *  原理實現(xiàn)的具體方案:只要調用緩存的get()方法后,立即將此元素從原先在LinkedList的位置更新到LinkedList最后的位置。 
     *  比如,原先是:1,2,3,4,5。當get了2后,現(xiàn)在的順序是:1,3,4,5,2。 
     * 
     *  緩存空間滿的情況下,則刪除最舊的元素(在最頭部),以騰出空間。  
     * 比如,緩存空間是5,原先緩存已經(jīng)緩存了5個元素:a,b,c,d,e, 
     * 當再次添加元素 f 時候,因為緩存空間是5容不下6個元素,所以刪除最頭部的元素a,把f追加到最尾部變成: b,c,d,e,f 
     *  
     * 具體使用:類似于Android的LruCache,對外公開兩個通用(通用,意味著可以存Bitmap或者類似的數(shù)據(jù))方法供存儲和讀取使用: 
     *  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>>();  
        }  
      
        // 動態(tài)調整緩存空間大小。  
        // 注意!該方法極可能線程不安全。  
        public void ensureCapacity(int capacity) {  
            if (capacity >= CAPACITY) {  
                // 若比原先大,直接賦值即可  
                // Capacity = capacity;  
            } else {  
                // 若新調整的容量比原先還要小,那么一個一個的刪掉頭部元素直到相等  
                while (mLinkedList.size() > capacity) {  
                    HashMap<String, Object> map = mLinkedList.removeFirst();  
                    System.out.println("\n刪除-> " + map.get(KEY) + ":"  
                            + map.get(VALUE));  
                }  
            }  
      
            CAPACITY = capacity;  
            System.out.println("\n重新調整緩存容量為:" + CAPACITY);  
        }  
      
        // 把需要緩存的數(shù)據(jù)以<key,value>鍵值對的形式存入緩存。  
        // 存之前,要檢查緩存是否滿,滿了的話就刪除LinkedList第一個元素。  
        public void put(String key, Object obj) {  
            if (mLinkedList.size() < CAPACITY) {  
      
            } else {  
                HashMap<String, Object> map = mLinkedList.removeFirst();  
                System.out.println("\n緩存空間已滿!刪除-> " + 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("\n緩存-> " + map.get(KEY) + ":" + map.get(VALUE));  
        }  
      
        // 根據(jù)key讀出緩存數(shù)據(jù)  
        // 原理:從頭到尾遍歷整個鏈表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;  
        }  
      
    //  // 僅僅是打印輸出現(xiàn)在最新的緩存數(shù)據(jù)情況。  
    //  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();  
    //      }  
    //  }  
    }  

標簽: 安全 大數(shù)據(jù)

版權申明:本站文章部分自網(wǎng)絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:jQuery禁用右鍵點擊

下一篇:使用jQuery預加載圖片