LinkedHashMap- accessOrder参数的意义

LinkedHashMap- accessOrder参数的意义

构造方法

public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder) {

accessOrder的取值只有true和false

示例:

static int capacity=4;
//为true的情况
  static  LinkedHashMap<Integer,String> map=new LinkedHashMap(4,  0.75f,true){
      @Override
      protected boolean removeEldestEntry(Map.Entry eldest) {
          return size()-capacity>0;
      }
  };
  //为false的情况
 static LinkedHashMap<Integer,String> map2=new LinkedHashMap(4,  0.75f,false){
     @Override
     protected boolean removeEldestEntry(Map.Entry eldest) {
         return size()-capacity>0;
     }
 };
public static void test(){
    map.put(1,"aa");
    map.put(2,"bb");
    map.put(3,"cc");
    map.put(4,"dd");
    map.get(1);
    map.put(5,"ff");
    map.put(4,"zz");
    for(Map.Entry<Integer,String> entry:map.entrySet()){
        System.out.println(entry.getKey()+" "+entry.getValue());
    }
}
输出:
3 cc
1 aa
5 ff
4 zz
public static void test2(){
    map2.put(1,"aa");
    map2.put(2,"bb");
    map2.put(3,"cc");
    map2.put(4,"dd");
    map2.get(1);
    map2.put(5,"ff");
    map2.put(4,"zz");
    for(Map.Entry<Integer,String> entry:map2.entrySet()){
        System.out.println(entry.getKey()+" "+entry.getValue());
    }
}
输出:
2 bb
3 cc
4 zz
5 ff

结论1:对比两个测试用例发现,当accessOrder为false时,通过get访问数据,不会改变元素的存放顺序。为true时,会改变。

map: 1-aa 2-bb 3-cc 4-dd 访问了1元素 变为 2-bb 3-cc 4-dd  1-aa 

所以存放数据5-ff时会覆盖最久未使用的2-bb

3-cc 4-dd  1-aa 5-ff

但是对于map2

map2: 1-aa 2-bb 3-cc 4-dd 访问了1元素 元素顺序不变化

所以存放数据5-ff时会覆盖最先插入的1-aa

2-bb 3-cc 4-dd 5ff

结论2:当accessOrder为false时,对已经有的数据重新存入,不会改变存放顺序。但是为true时,会改变。

map:  3-cc 4-dd  1-aa 5-ff 存入数据 4-zz 变为:3-cc 1-aa 5-ff 4-zz

因为对于key4,重新存入了一次改变了顺序
对于map2

2-bb 3-cc 4-dd 5ff 存入数据 元素顺序不变化 2-bb 3-cc 4-zz 5ff 

显然,通过结结果发现,顺序并未改变

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值