zoukankan      html  css  js  c++  java
  • LRU

    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * Created by pc on 2017/1/25.
     */
    public class LRUCache {
    
        private Object data;
        private Date lastTime;
    
        public LRUCache(Object data, Date lastTime) {
            this.data = data;
            this.lastTime = lastTime;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public Date getLastTime() {
            return lastTime;
        }
    
        public void setLastTime(Date lastTime) {
            this.lastTime = lastTime;
        }
    
        @Override
        public String toString() {
            return "data:"+data.toString()+" lastTime:"+date2Str(lastTime);
        }
    
        /**
         * 获取系统当前时间
         * @return
         */
        public static String date2Str(Date date) {
            SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
            return df.format(date);
        }
    }
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Comparator;
    import java.util.Date;
    import java.util.List;
    
    /**
     * 总结
     * Created by pc on 2017/1/25.
     */
    public class LRUCacheImpl {
    
        private int total;//设置缓存集合固定大小
    
        private LRUCache lruCache;
    
        private List<LRUCache> list = new ArrayList<>();
    
        public LRUCacheImpl(int total){
            this.total = total;
        }
    
        private int getListSize(){
            return list.size();
        }
    
        private void setElement(LRUCache lruCache){
            int oldSize = getListSize();
            if(oldSize+1>total){//超出则淘汰最近最少访问
                //排序 淘汰
                sortAsc();//当数据量太大时,这个排序肯定不行 所以按数组这样的方式淘汰是不行的,需要使用链表FIFO节省
                list.remove(0);//移除第一个
                list.add(lruCache);
            }else{
                list.add(lruCache);
            }
        }
    
        private void sortAsc(){
            //按时间升序排
            list.sort(new Comparator<LRUCache>() {
                @Override
                public int compare(LRUCache o1, LRUCache o2) {
                    return o1.getLastTime().compareTo(o2.getLastTime());
                }
            });
        }
    
        public List<LRUCache> getList(){
            return list;
        }
    
        public static void main(String[] args) {
            String pattern = "HH:mm:ss";
    
            LRUCache lruCache1 = new LRUCache("item1",parse("13:15:11",pattern));
            LRUCache lruCache2 = new LRUCache("item2",parse("11:10:01",pattern));
            LRUCache lruCache3 = new LRUCache("item3",parse("02:04:50",pattern));
            LRUCache lruCache4 = new LRUCache("item4",parse("21:35:06",pattern));
            LRUCache lruCache5 = new LRUCache("item5",parse("22:37:06",pattern));
    
            LRUCacheImpl impl = new LRUCacheImpl(4);
            impl.setElement(lruCache1);
            impl.setElement(lruCache2);
            impl.setElement(lruCache3);
            impl.setElement(lruCache4);
    
            List<LRUCache> list = impl.getList();
            System.out.println(list);
    
            impl.setElement(lruCache5);
            System.out.println(list);
    
            //[data:item1 lastTime:13:15:11, data:item2 lastTime:11:10:01, data:item3 lastTime:02:04:50, data:item4 lastTime:21:35:06]
            //[data:item3 lastTime:02:04:50, data:item2 lastTime:11:10:01, data:item1 lastTime:13:15:11, data:item4 lastTime:21:35:06]
            //最后一次访问时间最早的元素首先被淘汰
        }
    
    
        /**
         * 使用用户格式提取字符串日期
         * @param strDate 日期字符串
         * @param pattern 日期格式
         * @return
         */
        public static Date parse(String strDate, String pattern) {
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            try {
                return df.parse(strDate);
            } catch (ParseException e) {
                e.printStackTrace();
                return null;
            }
        }
    
    
    }
  • 相关阅读:
    Java开发中回车换行符的区别
    Eclipse中快捷键使用
    数组基础常用方法
    获取一组数组中最大值和最小值
    解决Java工程URL路径中含有中文的情况
    python录音,无声自动停止,或定时停止
    ChatterBot人工智能,聊天机器人,无坑指南(安装,使用)(2.使用篇)
    ChatterBot机器学习,聊天机器人,无坑指南(安装,使用)(1.安装篇)
    python播放mp3最佳方法
    自动天气
  • 原文地址:https://www.cnblogs.com/fofawubian/p/6349500.html
Copyright © 2011-2022 走看看