小心LinkedHashMap的get()方法(转)】的更多相关文章

这是一个来自实际项目的例子,在这个案例中,有同事基于jdk中的LinkedHashMap设计了一个LRUCache,为了提高性能,使用了 ReentrantReadWriteLock 读写锁:写锁对应put()方法,而读锁对应get()方法,期望通过读写锁来实现并发get(). 代码实现如下: private ReentrantReadWriteLock  lock = new ReentrantReadWriteLock (); lruMap = new LinkedHashMap<K, V>…
注:本文参考JDK1.7.0_45源码. LinkedHashMap是基于HashMap实现的数据结构,与HashMap主要的不同为每个Entry是使用双向链表实现的,并且提供了根据访问顺序进行排序的功能. // 双向链表 private transient Entry<K,V> header; // 如果为true,按照访问顺序排序:如果为false,按照插入顺序排序.默认为false,可以在构造函数中设置. private final boolean accessOrder; Linked…
多半是不小心使用qq管家之类软件加速系统时把SQL Server(MSSSQL)不小心关闭了 解决方法如下(以WIN8为例):…
序言 本来是不打算先讲map的,但是随着对set集合的认识,发现如果不先搞懂各种map,是无法理解set的.因为set集合很多的底层就是用map来存储的.比如HashSet就是用HashMap,LinkedHashSet就是用LinkedHashMap.所以打算把map讲完把. ---WH 一.LinkedHashMap 先来说说它的特点,然后在一一通过分析源码来验证其实现原理 1.能够保证插入元素的顺序.深入一点讲,有两种迭代元素的方式,一种是按照插入元素时的顺序迭代,比如,插入A,B,C,那…
LinkedHashMap特别有意思,它不仅仅是在HashMap上增加Entry的双向链接,它更能借助此特性实现保证Iterator迭代按照插入顺序(以insert模式创建LinkedHashMap)或者实现LRU(Least Recently Used最近最少算法,以access模式创建LinkedHashMap). 下面是LinkedHashMap的get方法的代码 public V get(Object key) { Entry<K,V> e = (Entry<K,V>)ge…
用IAR编译程序,有时候编译通过了,但是右键无法GO TO Definition  解决方法有两个: 第一.Tools -> Option  -> Project 把Generate browse information 勾上 第二.如果第一种方法,发现Generate browse information已经勾上了,那么点VIEW ->source browser  打开代码浏览窗口,如图: 然后再右键,发现可以GO TO了,这个问题比较奇怪,我也是不小心发现的这个方法(试过几次都可以…
阿里巴巴笔试考到了LRU,一激动忘了怎么回事了..准备不充分啊.. 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的.LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉.先说说List:每次访问一个元素后把这个元素放在 List一端,这样一来最远使用的元素自然就被放到List的另一端.缓存满了t的时候就把那最远使用的元素remove掉.但更实用的是HashMap.因为List太慢,要删掉的数据总是位于List底层数组的第一个位置,…
注:下面源代码基于jdk1.7.0_11 之前的两篇文章通过源代码分析了两种常见的Map集合,HashMap和Hashtable.本文将继续介绍还有一种Map集合--LinkedHashMap. 顾名思义,LinkedHashMap除了是一个HashMap之外.还带有LinkedList的特点.也就是说可以保持遍历的顺序和插入的顺序一致,那么它是怎么做到的呢?以下我们開始分析. 首先看构造器. public class LinkedHashMap<K,V> extends HashMap<…
一.前言 在上一篇随笔中,我们分析了HashMap的源码,里面涉及到了3个钩子函数,用来预设给子类--LinkedHashMap的调用,所以趁热打铁,今天我们来一起看一下它的源码吧. 二.LinkedHashMap的结构与继承关系 2.1 LinkedHashMap的数据结构 可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点--before和后一个节点--after,从而将所有的节点已链表的形式串联一起来,从名字上来看Linked…
前面已经说完了HashMap, 接着来说下LinkedHashMap. 看到Linked就知道它是有序的Map,即插入顺序和取出顺序是一致的, 究竟是怎样做到的呢? 下面就一窥源码吧. 1, LinkedHashMap基本结构 LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap. LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用n…