Java中的LinkedHashMap

介绍:

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.75
 
LinkedHashMap(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 element
 
    assertEquals("[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 element
 
    assertEquals("[1, 3, 2]", map.keySet().toString());
    
}

在使用键2作为元素访问元素时,它移到了最后一个位置。 显然, 根据从最近到最近的访问顺序对元素进行排序。

常用方法:

让我们探索流行的方法:

  1. V put(K键,V值):HashMap类继承此方法。 它存储给定的键值对。 如果键已经存在,则更新值
  2. void replaceAll(BiFunction <?super K,?super V,?extended V> function):用该条目上调用函数的结果替换每个条目的值,直到所有条目都已处理或该函数引发异常
  3. boolean containsKey(Object key):检查给定键是否存在
  4. boolean containsValue(Object value):如果至少有一个具有该值的键,则返回true
  5. V get(Object key):根据键检索值
  6. V getOrDefault(Object key,V defaultValue):如果键存在,则返回映射值,否则返回默认值
  7. void clear():删除所有元素
  8. Set <Map.Entry <K,V >> entrySet():返回给定地图中映射的Set视图
  9. Set <K> keySet():返回地图中包含的键的Set视图
  10. Collection <V> values():返回包含在映射中的值的Collection视图
  11. forEach(BiConsumer <?super K,?super V> action):对给定映射中的每个条目执行给定操作,直到处理完所有条目或引发异常
  12. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值