zoukankan      html  css  js  c++  java
  • LinkedHashMap使用心得

    基本概念:https://www.cnblogs.com/xiaoxi/p/6170590.html

    遇到问题:

    1、构造方法

    public static LinkedHashMap<String,Long> lhm= new LinkedHashMap<String,Long>(16, 0.75f, true);  //一定要加true,不然不会按照访问顺序排序。

    2、访问方式

    使用get(Object o)方式会改变该KEY值访问顺序,必须使用如下方法访问:

    LinkedHashMap<String,Long> lhm = new LinkedHashMap<String,Long>(16, 0.75f, true);
    Set<Map.Entry<String, Long>> set = lhm.entrySet();
    Iterator<Map.Entry<String, Long>> iterator = set.iterator();
    synchronized (iterator) {
    while (iterator.hasNext())
    {
    Entry<String, Long> entry = iterator.next();
    long vintime = entry.getValue();
    System.out.print(vintime+" ");
    }
    }

    3、该数据结构非线程安全,多线程使用必须加锁

    1) get()

    2) put()

    3) 遍历

    import java.util.LinkedHashMap;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;

    public class LRULinkedHashMap<K, V> extends LinkedHashMap<K, V> {
    /**
    *
    */
    private static final long serialVersionUID = -952299094512767664L;
    private final int maxCapacity;
    private static final float DEFAULT_LOAD_FACTOR = 0.75f;
    private final Lock lock = new ReentrantLock();

    public LRULinkedHashMap(int maxCapacity) {
    super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
    this.maxCapacity = maxCapacity;
    }

    @Override
    protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
    return size() > maxCapacity;
    }

    @Override
    public V get(Object key) {
    try {
    lock.lock();
    return super.get(key);
    } finally {
    lock.unlock();
    }
    }
    //可以根据实际情况,考虑对不同的操作加锁
    @Override
    public V put(K key, V value) {
    try {
    lock.lock();
    return super.put(key, value);
    } finally {
    lock.unlock();
    }
    }

    }

  • 相关阅读:
    转自:java 文件格式二进制头文件校验
    转载:Web安全X-FRAME-OPTIONS 出现两个或多个的原因
    转载:Web安全 之 X-Frame-Options响应头配置
    JavaWeb-用过滤器修改请求的返回状态码
    文件上传漏洞(绕过姿势)
    一个神奇的bug
    在mac上访问自带服务器权限问题
    学习使用crosswalk
    多个target下编译的时候出错问题的解决
    解决mac插入U盘不显示标识问题
  • 原文地址:https://www.cnblogs.com/anhaogoon/p/9891234.html
Copyright © 2011-2022 走看看