LinkedHashMap的构造方法有一个是这样子的:
1 public LinkedHashMap(int initialCapacity, 2 float loadFactor, 3 boolean accessOrder) { 4 super(initialCapacity, loadFactor); 5 this.accessOrder = accessOrder; 6 }
参数说明:
- initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16
- loadFactor 加载因子,使用无参构造方法时,此值默认是 0.75f
- 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
相关推荐
2. `public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:除了指定容量和加载因子外,还可以选择是否按访问顺序排列。 **常用方法** 1. `put(K key, V value)`:将指定的键值对...
`LinkedHashMap`是Java集合框架中的一个重要组成部分,属于`Map`接口的一个实现类。这个数据结构结合了哈希表(HashMap)和链表的特点,能够在保持元素的键值对存储的同时,保证元素的插入顺序或者按照访问顺序进行...
只需在创建LinkedHashMap时设置`accessOrder`为`true`即可启用这一特性。这样,频繁访问的元素会相对靠后,有助于优化访问频率高的元素的查找性能。 总的来说,LinkedHashMap结合了HashMap的高效查找和链表的顺序...
如果 `accessOrder` 属性为 true,LinkedHashMap 将移动该节点到链表的末尾,从而实现按访问顺序排序。 2. **afterNodeInsertion(boolean evict)**: 在插入新节点后调用。在这个方法中,除了添加新节点到哈希表和...
- `public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)` - 可以指定是否按照访问顺序排列。 5. **主要方法**: - `put(K key, V value)`:将指定的键值对插入到映射中。如果键...
* `public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)`: 带有初始容量、加载因子和访问顺序的构造方法,可以指定链表中的元素排序的规则。 ### init方法 LinkedHashMap的init方法...
在LinkedHashMap的初始化中,有一个重要的参数accessOrder,它控制着元素的顺序。accessOrder为true时,表示按照访问的顺序来,也就是谁最先访问,就排在第一位;accessOrder为false时,表示按照存放顺序来,就是你...
5. `LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:允许设置accessOrder。 **主要操作** 1. **元素删除**:`afterNodeRemoval(Node e)`方法在节点被删除时调用,负责从链表中移除...
- **访问顺序**:如果在构造`LinkedHashMap`时设置了`accessOrder`参数为`true`,那么它将按照访问顺序排列,即每次访问一个元素(包括读取和修改)后,该元素会被移动到链表的末尾。 - **双向链表**:`...
当`accessOrder`参数设置为`true`时,`LinkedHashMap`会按照访问顺序排列,最近访问的元素会被移动到链表头部。 #### `LinkedHashMap`的构造函数: ```java public LinkedHashMap(int initialCapacity, float ...
LinkedHashMap提供了一个构造函数,通过参数`accessOrder`来决定按照访问顺序还是插入顺序维护元素: ```java public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { super...
2. 可配置为访问顺序:通过构造函数设置`accessOrder`参数为`true`,可以使得每次访问(get、put等操作)后,元素根据访问顺序重新排列。 以下是一个简单的示例,展示如何在Intent中传递一个有序的LinkedHashMap: ...
3. **访问顺序**:我们需要开启`LinkedHashMap`的访问顺序跟踪,通过构造函数设置`accessOrder`为`true`。 4. **移除策略**:当达到最大容量时,我们需要覆盖`removeEldestEntry`方法来决定是否移除最旧的条目。 5. ...
`LinkedHashMap`保持了插入顺序,通过`accessOrder`参数设置为`true`,可以使其变为访问顺序,即每次访问元素都会将其移动到末尾。 2. **数据结构实现**:在`LRU.java`中,可能会定义一个名为`LRU`的类,该类包含一...
- `LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)`:创建一个具有初始容量、加载因子和访问顺序策略的LinkedHashMap。如果`accessOrder`为`true`,则按访问顺序存储;否则按插入顺序...
1. LinkedMap使用:LruCache使用LinkedHashMap来存储缓存对象,LinkedHashMap的accessOrder属性被设置为true,使得缓存对象的访问顺序被记录下来。 2. 缓存添加:当添加新的缓存对象时,LruCache会将其添加到缓存...
2. **LinkedHashMap**:LinkedHashMap保持了元素的插入顺序,或者按照访问顺序(如果设置了`accessOrder`为true)。它在HashMap的基础上添加了一个双向链表,因此在遍历时能保持顺序性,但牺牲了一些性能。 3. **...