• LinkedHashMap概述


    1. LinkedHashMap概述:

    LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。

       LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变
       LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
       注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。

    根据链表中元素的顺序可以分为:按插入顺序的链表,和按访问顺序(调用get方法)的链表。  

    默认是按插入顺序排序,如果指定按访问顺序排序,那么调用get方法后,会将这次访问的元素移至链表尾部,不断访问可以形成按访问顺序排序的链表。  可以重写removeEldestEntry方法返回true值指定插入元素时移除最老的元素。 

    2.LinkedHashMap以访问顺序排序,可用于实现LRUMap

    linkedHashMap也是map的实现,使用Iterator遍历的时候 最先得到的是先插入的数据。
    保证了数据插入的顺序。

    public class LRUMap extends LinkedHashMap {
        private static final long serialVersionUID = -3700466745992492679L;
        private int               coreSize;
        public LRUMap(int coreSize) {
            super(coreSize + 1, 1.1f, true);
            this.coreSize = coreSize;
        }
        @Override
        protected boolean removeEldestEntry(java.util.Map.Entry eldest) {
            return size() > coreSize;
        }
    }

    覆盖removeEldestEntry方法,当超过这个容量的时候,
    put进新的值方法返回true时,便移除该map中最老的键和值

    public LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder);
     initialCapacity   初始容量
     loadFactor    加载因子,一般是 0.75f
     accessOrder   false 基于插入顺序  true  基于访问顺序(get一个元素后,这个元素被加到最后,使用了LRU 最近最少被使用的调度算法)
    如 boolean accessOrder = true; 
          Map m = new LinkedHashMap(20, .80f,  accessOrder  );
          m.put("1", "my"));
          m.put("2", "map"));
          m.put("3", "test"));
          m.get("1");
          m.get("2");
          Log.d("tag",  m);
         若 accessOrder == true;  输出 {3=test, 1=my, 2=map}
           accessOrder == false;  输出 {1=my, 2=map,3=test}
    

      

  • 相关阅读:
    对C++虚函数、虚函数表的简单理解
    子数组最大累加和
    和为k的最长子数组及其延伸
    CentOS 安装codeblocks
    CentOS 6 安装chromium
    数组中累加和小于等于k的最长子数组
    数组最大矩形面积
    关于商品买卖最大收益的问题
    数组中只出现一次的数
    TinyHttpd代码解析
  • 原文地址:https://www.cnblogs.com/kxdblog/p/5859626.html
Copyright © 2020-2023  润新知