js 简单实现 LFU
标签:
JavaScript
/* ======================================== LFU 最近最少使用 ======================================== */function LFUCache(limit){ limit = limit||10; var _store = []; // 存储数据 {count:1,data:""} var index = {}; this.get = function(key){ var ind = index[key]; var result = _store[ind]; if(result==null){ // 未命中 return null; } var count = ++result.count; var newInd = -1; for(var i=0;i<ind;i++){ if(_store[i].count<=count){ newInd = i; break; } } // 将命中的元素移动到指定的位置 _store.splice(ind,1); _store.splice(newInd,0,result); for(var k in index){ if(index[k]>=newInd){ index[k]=++index[k]; } } index[key] = newInd; return result; }; this.set = function(key,value){ if(_store.length>=limit){ _store.pop(); } // 获取count为1的第一个数组索引 var oneCountIndex = -1; for(var i=0;i<_store.length;i++){ var count = _store[i].count; if(count==1){ oneCountIndex = i; break; } } var item = {count:1,data:value}; if(oneCountIndex>-1){ _store.splice(oneCountIndex,0,item); for(var k in index){ if(index[k]>=oneCountIndex){ index[k]=++index[k]; } } index[key] = oneCountIndex; }else{ _store.push(item); index[key] = _store.length-1; } }; this.list = function(){ console.log(JSON.stringify(_store)); }; }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦