前言
之前的文章,我们对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的作用,如下图
这个是什么意思的就是把元素是按照插入时的顺序排序还是按照你访问的顺序排序。插入时的排序很好理解,访问时的顺序排序是怎么回事呢,就是默认按照插入时的顺序排序的,然后你查询了某一个元素,就把这个元素移到链表的前面。文章来源:https://www.toymoban.com/news/detail-584867.html
总结
LinkedHashMap就是在HashMap的基础之前添加了一个链表,可以使集合有序,除此之外,其他特点均和hashmap相同。文章来源地址https://www.toymoban.com/news/detail-584867.html
到了这里,关于java集合之LinkedHashMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!