java集合之LinkedHashMap

前言

之前的文章,我们对HashMap进行了讲解。在之前的文章,我们了解到,HashMap是唯一且无序的。然而LinkedHashMap是有序的,并且也是唯一的。那这个是怎么实现有序的呢,接下来我们将慢慢讲述。

常用方法

linkedHashMap的常用方法和hashmap的常用方法基本一致。都是put添加元素,remove移除元素,get得到某个key对应的value值。这里对linkedHashMap的唯一性,不再进行验证,之前在Hashmap章节验证过hashmap的唯一性了,linkedHashMap一样的,所以不在这里进行验证。
在这里插入图片描述

linkedHashMap 遍历

遍历有很多种,这里我们依然只用一种展示和介绍,如下图。

Collection res = linkedHashMap.values();
      Iterator i = res.iterator();
      while (i.hasNext()) {
         System.out.println(i.next());
      }

这种是通过迭代器来进行遍历集合的。这种方式遍历的是value值。

linkedHashMap 底层分析

在这里插入图片描述
linkedHashMap其实是继承自hashmap,所以hashmap应有的特点的,linkedHashMap也会有。然后我们看linkedHashMap的属性。
在这里插入图片描述
在这里我们看出,他有一个是Entry类型的head变量,他有什么用呢,看起来应该是链表的头结点,具体是不是呢,我们等会接着往下看。我们再看下linkedHashMap的构造方法。
在这里插入图片描述

我们看到,他是直接调用的hashmap的构造方法,除此外就是给accessOrder属性赋值了,这个属性应该是排序有关的,具体,我们接着往下看,看他的put方法。
在这里插入图片描述
没错,在这里我们可以看出,直接调用的是父类HashMap的put方法进行的元素添加,那他是怎么实现的有序的呢,看下图
在这里插入图片描述
他重写了newNode的方法,在这里他把每一个添加的元素,用一个链表串起来了,
在这里插入图片描述
这里我们可以看出,之前类属性head确实是头结点,而类属性tail是当前节点。最后我们看下类属性accessOrder的作用,如下图
在这里插入图片描述
这个是什么意思的就是把元素是按照插入时的顺序排序还是按照你访问的顺序排序。插入时的排序很好理解,访问时的顺序排序是怎么回事呢,就是默认按照插入时的顺序排序的,然后你查询了某一个元素,就把这个元素移到链表的前面。

总结

LinkedHashMap就是在HashMap的基础之前添加了一个链表,可以使集合有序,除此之外,其他特点均和hashmap相同。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark---小鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值