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% 时,其容量空间自动扩张至原容量的一倍。一般来说,没有什么特殊的要求,不建议去更改。