深入理解HashMap和LinkedHashMap的区别
目录
深入理解HashMap和LinkedHashMap的区别 简介我们知道HashMap的变量顺序是不可预测的,这意味着便利的输出顺序并不一定和HashMap的插入顺序是一致的。这个特性通常会对我们的工作造成一定的困扰。为了实现这个功能,我们可以使用LinkedHashMap。 LinkedHashMap详解先看下LinkedHashMap的定义:
LinkedHashMap继承自HashMap,所以HashMap的所有功能在LinkedHashMap都可以用。 LinkedHashMap和HashMap的区别就是新创建了一个Entry:
这个Entry继承自HashMap.Node,多了一个before,after来实现Node之间的连接。 通过这个新创建的Entry,就可以保证遍历的顺序和插入的顺序一致。 插入下面看一个LinkedHashMap插入的例子:
输出结果:
可以看到输出结果和插入结果是一致的。 访问除了遍历的顺序,LinkedHashMap还有一个非常有特色的访问顺序。 我们再看一个LinkedHashMap的构造函数:
前面的两个参数initialCapacity,loadFactor我们之前已经讲过了,现在看最后一个参数accessOrder。 当accessOrder设置成为true的时候,就开启了 access-order。 access order的意思是,将对象安装最老访问到最新访问的顺序排序。我们看个例子:
输出结果:
我们看到,因为访问了一次“aaa“,从而导致遍历的时候排到了最后。 removeEldestEntry最后我们看一下LinkedHashMap的一个特别的功能removeEldestEntry。这个方法是干什么的呢? 通过重新removeEldestEntry方法,可以让LinkedHashMap保存特定数目的Entry,通常用在LinkedHashMap用作缓存的情况。 removeEldestEntry将会删除最老的Entry,保留最新的。
看上面的一个自定义的例子,上面的例子我们创建了一个保留10个Entry节点的LinkedHashMap。 总结LinkedHashMap继承自HashMap,同时提供了两个非常有用的功能。 本文的例子https://github.com/ddean2009/learn-java-collections
(编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |