java.util.LinkedHashMap类

java.util.LinkedHashMap类


特点

  • LinkedHashMapHashMap一样,存储的是键值对,且不允许重复key,允许null key
  • LinkedHashMap默认是根据插入顺序排列元素,将元素存储在双向链表中;但是通过特殊构造函数(accessOrder = true)构建的LinkedHashMap可以根据访问顺序排序元素,最近最少访问的元素在队首,一般用于实现LRU
  • LinkedHashMap非线程安全!!!

    使用Map<Integer, Integer> map = Collections.synchronizedMap(new LinkedHashMap<>());可以构建线程安全的LinkedHashMap,但是效率极其低下,不如直接使用ConcurrentHashMap

1
2
3
4
5
public class LinkedHashMap<K, V> extends HashMap<K, V>
implements Map<K, V> {
//...

}

父类


父接口

  • Map<K, V>

API

1. 构造函数

  1. public LinkedHashMap():默认构造函数,初始容量16,负载因子.75faccessOrder = false:按照插入顺序排序
  2. public LinkedHashMap(int initialCapacity):初始容量为入参,负载因子.75faccessOrder = false:按照插入顺序排序;
  3. public LinkedHashMap(int initialCapacity, float loadFactor):初始容量、负载因子为入参,accessOrder = false:按照插入顺序排序;
  4. public LinkedHashMap(Map map):根据入参给定的Map构建;
  5. public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)accessOrder = false时和其他构造函数一样,都是根据插入顺序排序元素;accessOrder = true时根据元素访问顺序排序,最近最少访问的元素在队首,一般用于实现LRU

    调用put/putIfAbsent/get/getOrDefault/compute/computeIfAbsent/computeIfPresent/merge都可以改变元素顺序。

1.1 accessOrder = true:实现LRU

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//accessOrder = true
public LinkedHashMap<Integer, String> lru = new LinkedHashMap<>(16, .75f, true);
lru.put(1, "a");
lru.put(2, "b");
lru.put(3, "c");
lru.get(3);
lru.getOrDefault(2, "not b");
lru.forEach((key, value) -> {
System.out.println(key + " : " + value);
});
//输出:
//1 : a
//3 : c
//2 : b

2. 查

  1. public V get(Object key):返回key对应的value
  2. public V getOrDefault(Object key, V defaultValue)如果key对应的valuedefaultValue,则返回defaultValue,否则返回原value

3. 增/改

  1. public V put(K key, V value):插入键值对
  2. public V putIfAbsent(K key, V value)key不存在时才插入键值对

4. 删

  1. Object remove(Object key):删除key对应的元素
  2. boolean removeEldestEntry(Map.Entry eldest)删除最老元素(即队首)
  3. void clear():清空整个LinkedHashMap

5. 大小:size()


6. 判空:isEmpty()


7. 判断是否存在

  1. boolean contiansKey(Object key):判断是否存在key
  2. boolean contiansValue(Object value):判断是否存在value
-------------本文结束感谢您的阅读-------------

本文标题:java.util.LinkedHashMap类

文章作者:DragonBaby308

发布时间:2019年09月10日 - 22:32

最后更新:2019年09月22日 - 10:09

原始链接:http://www.dragonbaby308.com/java-util-LinkedHashMap/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%