JAVA 中LinkedHashMap要点记录

时间:2023-03-08 22:42:31
JAVA 中LinkedHashMap要点记录

JAVA 中LinkedHashMap要点记录

构造函数中可能出现的几个参数说明如下:

1、initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16

2、loadFactor 加载因子,使用无参构造方法时,此值默认是 0.75f

3、accessOrder false: 基于插入顺序 true: 基于访问顺序

  • 其余的几个参数都好理解,关键是最后一个参数,是LinkedHashMap区别于其余类型的HashMap的一个关键特性所在。 对于accessOrder设置为true的时候,其依据LRU的原则,会按照最近使用次数进行排序,最近使用的会被排在后面,不使用的会被排在后面。

  • 此外,可以通过覆写removeEldestEntry方法,来实现控制此Map的最大key条数,当Map中key数量达到指定的设定值的时候,就会按照指定的排序规则,将排在最前面的数据给删除掉,然后插入新的数据(覆写方法之后,在调用put方法的时候会自动调用,无需业务代码中显式调用),示例代码如下所示:

public class FixedLengthLinkedHashMap<K, Vextends LinkedHashMap<K, V>
{
private int maxEntries; public FixedLengthLinkedHashMap(int maxEntries, boolean accessOrder)
{
super(16, 0.75f, accessOrder); this.maxEntries = maxEntries;
} private static final long serialVersionUID = 1287190405215174569L; protected boolean removeEldestEntry(Map.Entry<K, Veldest)
{
return size() maxEntries;
}
}

比较适合需要排序,或者需要限制Map缓存数量、或者是需要清理最早或者最不常用的数据的场景。

但是需要注意一点: LinkedHashMap是非线程安全的,多线程场景需要注意。