`
m635674608
  • 浏览: 5042095 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

LinkedHashMap的accessOrder的作用

    博客分类:
  • java
 
阅读更多

LinkedHashMap的构造方法有一个是这样子的:

1 public LinkedHashMap(int initialCapacity,
2              float loadFactor,
3                          boolean accessOrder) {
4         super(initialCapacity, loadFactor);
5         this.accessOrder = accessOrder;
6     }

参数说明:

  1. initialCapacity   初始容量大小,使用无参构造方法时,此值默认是16
  2. loadFactor       加载因子,使用无参构造方法时,此值默认是 0.75f
  3. accessOrder   false: 基于插入顺序     true:  基于访问顺序 

重点看看accessOrder的作用,使用无参构造方法时,此值默认是false。

那么设置成true的时候会是什么样子的呢?

复制代码
 1     public static void main(String[] args) {
 2         Map<String, String> map = new LinkedHashMap<String, String>(16,0.75f,true);
 3         map.put("1", "a");
 4         map.put("2", "b");
 5         map.put("3", "c");
 6         map.put("4", "e");
 7 
 8         for (Iterator<String> iterator = map.values().iterator(); iterator
 9                 .hasNext();) {
10             String name = (String) iterator.next();
11             System.out.print(name);
12         }
13     }
复制代码

上面的代码打印结果为:abce,很正常,按照加入的顺序打印

现在增加两行代码:

复制代码
 1     public static void main(String[] args) {
 2         Map<String, String> map = new LinkedHashMap<String, String>(16,0.75f,true);
 3         map.put("1", "a");
 4         map.put("2", "b");
 5         map.put("3", "c");
 6         map.put("4", "e");
 7         
 8         //new add
 9         map.get("1");
10         map.get("2");
11 
12         for (Iterator<String> iterator = map.values().iterator(); iterator
13                 .hasNext();) {
14             String name = (String) iterator.next();
15             System.out.print(name);
16         }
17     }
复制代码

打印结果为:ceab 

这就是基于访问的顺序,get一个元素后,这个元素被加到最后(使用了LRU 最近最少被使用的调度算法)

 http://www.cnblogs.com/yejg1212/archive/2013/04/01/2992921.html

分享到:
评论

相关推荐

    LinkedHashmap的使用

    2. `public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:除了指定容量和加载因子外,还可以选择是否按访问顺序排列。 **常用方法** 1. `put(K key, V value)`:将指定的键值对...

    LinkedHashMap

    `LinkedHashMap`是Java集合框架中的一个重要组成部分,属于`Map`接口的一个实现类。这个数据结构结合了哈希表(HashMap)和链表的特点,能够在保持元素的键值对存储的同时,保证元素的插入顺序或者按照访问顺序进行...

    一文搞懂Java的LinkedHashMap.docx

    只需在创建LinkedHashMap时设置`accessOrder`为`true`即可启用这一特性。这样,频繁访问的元素会相对靠后,有助于优化访问频率高的元素的查找性能。 总的来说,LinkedHashMap结合了HashMap的高效查找和链表的顺序...

    java软件技术文档-深入java8的集合4:LinkedHashMap的实现原理.pdf

    如果 `accessOrder` 属性为 true,LinkedHashMap 将移动该节点到链表的末尾,从而实现按访问顺序排序。 2. **afterNodeInsertion(boolean evict)**: 在插入新节点后调用。在这个方法中,除了添加新节点到哈希表和...

    JavaLinkedHashMap源码解析Java开发Ja

    - `public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)` - 可以指定是否按照访问顺序排列。 5. **主要方法**: - `put(K key, V value)`:将指定的键值对插入到映射中。如果键...

    Java集合框架源码分析之LinkedHashMap详解

    * `public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)`: 带有初始容量、加载因子和访问顺序的构造方法,可以指定链表中的元素排序的规则。 ### init方法 LinkedHashMap的init方法...

    Java中LinkedHashMap源码解析

    在LinkedHashMap的初始化中,有一个重要的参数accessOrder,它控制着元素的顺序。accessOrder为true时,表示按照访问的顺序来,也就是谁最先访问,就排在第一位;accessOrder为false时,表示按照存放顺序来,就是你...

    今天会是有Offer的一天么:面试时不要再问我LinkedHashMap了

    5. `LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:允许设置accessOrder。 **主要操作** 1. **元素删除**:`afterNodeRemoval(Node e)`方法在节点被删除时调用,负责从链表中移除...

    LinkedHashMap-java

    - **访问顺序**:如果在构造`LinkedHashMap`时设置了`accessOrder`参数为`true`,那么它将按照访问顺序排列,即每次访问一个元素(包括读取和修改)后,该元素会被移动到链表的末尾。 - **双向链表**:`...

    LRU算法实现1

    当`accessOrder`参数设置为`true`时,`LinkedHashMap`会按照访问顺序排列,最近访问的元素会被移动到链表头部。 #### `LinkedHashMap`的构造函数: ```java public LinkedHashMap(int initialCapacity, float ...

    浅谈Android LruCache的缓存策略

    LinkedHashMap提供了一个构造函数,通过参数`accessOrder`来决定按照访问顺序还是插入顺序维护元素: ```java public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { super...

    Activity 间intent传递有序排序的map集合

    2. 可配置为访问顺序:通过构造函数设置`accessOrder`参数为`true`,可以使得每次访问(get、put等操作)后,元素根据访问顺序重新排列。 以下是一个简单的示例,展示如何在Intent中传递一个有序的LinkedHashMap: ...

    LRUCache实现 同步LRUCache

    3. **访问顺序**:我们需要开启`LinkedHashMap`的访问顺序跟踪,通过构造函数设置`accessOrder`为`true`。 4. **移除策略**:当达到最大容量时,我们需要覆盖`removeEldestEntry`方法来决定是否移除最旧的条目。 5. ...

    LRU.rar_LRU_LRU ja

    `LinkedHashMap`保持了插入顺序,通过`accessOrder`参数设置为`true`,可以使其变为访问顺序,即每次访问元素都会将其移动到末尾。 2. **数据结构实现**:在`LRU.java`中,可能会定义一个名为`LRU`的类,该类包含一...

    java中MAp介绍

    - `LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:创建一个具有初始容量、加载因子和访问顺序策略的LinkedHashMap。如果`accessOrder`为`true`,则按访问顺序存储;否则按插入顺序...

    Android缓存机制——LruCache的详解

    1. LinkedMap使用:LruCache使用LinkedHashMap来存储缓存对象,LinkedHashMap的accessOrder属性被设置为true,使得缓存对象的访问顺序被记录下来。 2. 缓存添加:当添加新的缓存对象时,LruCache会将其添加到缓存...

    java中map的使用实例

    2. **LinkedHashMap**:LinkedHashMap保持了元素的插入顺序,或者按照访问顺序(如果设置了`accessOrder`为true)。它在HashMap的基础上添加了一个双向链表,因此在遍历时能保持顺序性,但牺牲了一些性能。 3. **...

Global site tag (gtag.js) - Google Analytics