JAVA 中LinkedHashMap要点记录

Java LinkedHashMap详解
本文详细介绍了Java中LinkedHashMap的使用要点,包括构造函数参数的意义、基于访问顺序的特点以及如何通过覆写removeEldestEntry方法实现固定长度的Map。适用于需要排序、限制缓存数量或清理最不常用数据的场景。

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是非线程安全的,多线程场景需要注意。

转载于:https://www.cnblogs.com/veezean/p/7605131.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值