介绍:
LinkedHashMap是一个Map实现,它维护其元素的插入顺序。 它扩展了HashMap类:
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
就像HashMap一样 ,它允许存储一个null键和许多null值。
实例化
我们可以使用以下构造函数之一来创建LinkedHashMap :
LinkedHashMap() //default capacity 16 with load factor of 0.75LinkedHashMap(Map<? extends K,? extends V> map)LinkedHashMap(int initialCapacity)LinkedHashMap(int initialCapacity, float loadFactor)LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
最后一个构造函数还接受布尔参数accessOrder 。
当我们将true传递给accessOrder时,我们将实例化一个访问顺序LinkedHashMap 。 访问顺序LinkedHashMap维护从最近使用到最近使用的元素的访问顺序,而不是插入顺序。
我们可以将Java LinkedHashMap分为两个主要类别:
1.插入顺序
除非另有说明,否则LinkedHashMap会维护其元素的插入顺序。 我们可以将其命名为插入顺序LinkedHashMap 。
让我们看一个例子:
@Test
public void insertionOrderLinkedHashMap() {LinkedHashMap<Integer, String> map = new LinkedHashMap<>();map.put(1, "A");map.put(2, "B");map.put(3, "C");assertEquals("[1, 2, 3]", map.keySet().toString());map.get(2); // accessing elementassertEquals("[1, 2, 3]", map.keySet().toString()); //still maintains insertion order}
2.访问顺序
当我们使用构造函数: LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)并将真实值传递给accessOrder参数时,我们将获得一个访问顺序LinkedHashMap 。
让我们看看访问顺序LinkedHashMap的实际工作原理:
@Test
public void accessOrderLinkedHashMap() {LinkedHashMap<Integer, String> map = new LinkedHashMap<>(16, 0.75f, true);map.put(1, "A");map.put(2, "B");map.put(3, "C");assertEquals("[1, 2, 3]", map.keySet().toString());map.get(2); // accessing elementassertEquals("[1, 3, 2]", map.keySet().toString());}
在使用键2作为元素访问元素时,它移到了最后一个位置。 显然, 根据从最近到最近的访问顺序对元素进行排序。
常用方法:
让我们探索流行的方法:
- V put(K键,V值):从HashMap类继承此方法。 它存储给定的键值对。 如果键已经存在,则更新值
- void replaceAll(BiFunction <?super K,?super V,?extended V> function):用该条目上调用函数的结果替换每个条目的值,直到所有条目都已处理或该函数引发异常
- boolean containsKey(Object key):检查给定键是否存在
- boolean containsValue(Object value):如果至少有一个具有该值的键,则返回true
- V get(Object key):根据键检索值
- V getOrDefault(Object key,V defaultValue):如果键存在,则返回映射值,否则返回默认值
- void clear():删除所有元素
- Set <Map.Entry <K,V >> entrySet():返回给定地图中映射的Set视图
- Set <K> keySet():返回地图中包含的键的Set视图
- Collection <V> values():返回包含在映射中的值的Collection视图
- forEach(BiConsumer <?super K,?super V> action):对给定映射中的每个条目执行给定操作,直到处理完所有条目或引发异常
- protected boolean removeEldestEntry(Map.Entry <K <V> eldest) :如果地图应删除其最旧的条目,则此方法将返回true
现在让我们尝试以下几种方法:
Map<Integer, String> map = new LinkedHashMap<>();map.put(1, "A");
map.put(2, "B");map.forEach((k, v) -> System.out.println(k + ":" + v));System.out.println(map.size());System.out.println(map.containsKey(1));System.out.println(map.get(1));map.remove(1);for(Map.Entry<Integer, String> entry : map.entrySet()) {System.out.println("Key=" + entry.getKey() + ", Value=" + entry.getValue());
}
结论:
在这篇快速文章中,我们研究了LinkedHashMap是什么以及如何实例化和使用它。
成为第一个发表评论的人。
翻译自: https://www.javacodegeeks.com/2019/05/linkedhashmap-java.html