日期:2014-05-20  浏览次数:20666 次

LRU算法
<pre>
import   java.util.*;

public   class   LinkedHashMapDemo   {
   
    public   static   void   main(String[]   args)   {
        String[][]   str={
        { "Kobe ", "Bryant "},
        { "Tracy ", "McGrady "},
        { "Allen ", "Iverson "},
        { "Dwyne ", "Wade "},
        { "Kevin ", "Garnett "},
        };
        Map <String,String>   linkedMap   =   new   LinkedHashMap <String,String> ();
        for(int   i   =   0   ;   i   <   str.length   ;   i++){
                linkedMap.put(str[i][0],str[i][1]);
        }
        System.out.println(linkedMap);
        //   Least-recently   used   order:
        linkedMap   =   new   LinkedHashMap <String,String> (16,   0.75f,true);
        //为什么这里这样定义LinkedHashMap就会自动用LRU算法?
        for(int   i   =   0   ;   i   <   str.length   ;   i++){
                linkedMap.put(str[i][0],str[i][1]);
        }
        System.out.println(linkedMap);
        for(int   i   =   0;   i   <   3;   i++)   //   Cause   accesses:
                linkedMap.get(str[i][0]);
        System.out.println(linkedMap);
        linkedMap.get( "Tracy ");
        System.out.println(linkedMap);
    }
}
</pre>
这是输出结果:
{Kobe=Bryant,   Tracy=McGrady,   Allen=Iverson,   Dwyne=Wade,   Kevin=Garnett}
{Kobe=Bryant,   Tracy=McGrady,   Allen=Iverson,   Dwyne=Wade,   Kevin=Garnett}
{Dwyne=Wade,   Kevin=Garnett,   Kobe=Bryant,   Tracy=McGrady,   Allen=Iverson}
{Dwyne=Wade,   Kevin=Garnett,   Kobe=Bryant,   Allen=Iverson,   Tracy=McGrady}


------解决方案--------------------
这个。。。看API吧:
LinkedHashMap
public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)
构造一个带指定初始容量、加载因子和排序模式的空 LinkedHashMap 实例。

参数:
initialCapacity - 初始容量。
loadFactor - 加载因子。
accessOrder - 排序模式 - 对于访问顺序,为 true;对于插入顺序,则为 false。

------解决方案--------------------
加载因子是已存和的数据容量与总容量的比率,采用小数表示,默认为 0.75,即表示当 Map 中的数据量达到总容量的 75% 时,其容量空间自动扩张至原容量的一倍。一般来说,没有什么特殊的要求,不建议去更改。