为了账号安全,请及时绑定邮箱和手机立即绑定

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 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消