简单地快速存储和读取的数据结构

在项目开发中,需要一个数据容器,需要快速存储数据,和随机读取。所以设计了一种linklist和hashmap的数据结构,linklist是副表,存储索引,hashmap是主表,存储数据。这是典型的以空间换时间做法。


/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package org.ymcn.util;


import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;


public class LruCache<K, V> {


    private final HashMap<K, V> mLruMap;
    private final LinkedList<K> products = new LinkedList<K>(); 
    
   
    @SuppressWarnings("serial")
    public LruCache(final int capacity) {
        mLruMap = new LinkedHashMap<K, V>(16, 0.75f, true) {
            @Override
            protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
                return size() > capacity;
            }
        };
    }


    public  static class Entry<K, V>{
    public K mKey;
        public V mValue;
        public Entry(K key, V value) {
            mKey = key;
            mValue=value;
        }
    }




    public synchronized V put(K key, V value) {


        if(mLruMap.containsKey(key)){//存在这个key
        mLruMap.remove(key);
        mLruMap.put(key, value);
        }else{
        mLruMap.put(key, value);
        products.add(key);
        }
        return value;
    }




    public synchronized void clear() {
        mLruMap.clear();
        products.clear();
    }
   
//    public synchronized void remove(K key) {
//        mLruMap.remove(key);
//        products.remove(key);
//    }
    
    
    public synchronized int getlength(){
return mLruMap.size();
    }
    
    public synchronized Entry<K,V> getAndRemoveFirstKey(){
    if(products.isEmpty()){
    return null;
    }
    K key = products.removeFirst();
    V value = mLruMap.get(key);
    mLruMap.remove(key);
    return new Entry<K, V>(key, value);
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值