首页 > 编程知识 正文

linkedhashmap有序,lrucache实现

时间:2023-05-04 21:01:24 阅读:55639 作者:216

LRU算法最近使用了最低限度的原则。 要实现此算法,请使用链接的HashMap数据结构、链接的HashMap继承HashMap,并使用哈希表和双向链表存储所有元素。 使用链接的hashmap,可以确保按顺序保存元素。

默认情况下,链接的hashmap按元素的添加顺序保存。 此外,还可以启用保存访问顺序。 也就是说,将最近读取的数据放在最前面,将最旧的数据放在最后。 其次,还有一种确定是否删除最旧的数据的方法。 缺省情况下,返回false。 也就是说,不会删除数据。

本节简要介绍了基于这两种存储方法的LRU算法的实现方法。

一、基于添加顺序存储的方式实现LRU:publicclasslrutest { int capacity; LinkedHashMapInteger,Integer cache; Lrutest(intcapacity ) { cache=new LinkedHashMap ); this.capacity=capacity; //访问元素公共int get (intkey ) if (! cache.containskey(key ) ) { return -1; //存在。 从链表的开头删除,插入链表末尾的intval=cache.get(key ); cache.remove(key; che.put (密钥,val ); 返回电压; //元素publicvoidput(intkey,int val ) if ) cache.containskey ) (cache.remove ) key ); //链表填满后,返回头部节点if(cache.size(==capacity ) { SetInteger keySet=cache.keySet ) ); iteratorintegeriterator=keyset.iterator (; che.remove(iterator.next ) ); }cache.put(key,val ); }

二、基于访问顺序保存的方式实现LRU :

该方案的核心是继承链接的hashmap,将链接的hashmap的访问顺序参数设置为true,然后将链接的hashmap的removeEldestEntry (

publicclasslrutestextendslinkedhashmapstring,String{ private int capacity;/* *如果链接的hashmap的访问顺序参数为true,则按访问顺序排序,最近访问的为第一个,最近访问的为最后*/publiclrutest(intcapacity ) super 缺省情况下,如何确定是否删除} /** * LinkedHashMap拥有的最旧元素将返回false。 即,旧数据*/@ overrideprotectedbooleanremoveeldestentry (map.entry string,striing } )测试方法:

publicstaticvoidmain (string [ ] args ) { MapString,stringlinkedhashmap=newlrutest (6); linkedhashmap.put('1)、'1); linkedhashmap.put('2)、'2); linkedhashmap.put('3)、'3); linkedhashmap.put('4)、'4); linkedhashmap.put('5)、'5); linkedhashmap.put('6)、'6); linkedhashmap.put('7)、'7); linkedhashmap.put('8)、'8); linkedhashmap.put('9、'9); system.out.println (' size=' linked hashmap.size ) ); system.out.println (链接的hashmap.get ('8) ); linkedHashmap.foreach((k,v )-) system.out.print ) k':'v ' ); ); System.out.println (; system.out.println (' size=' linked hashmap.size ) ); }输出结果:

size=68433604533605633606733607933609833608 size=6

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。