HashMap和LinkedHashMap是Java平台中最常用的两个通用Map实现。 它们基本上是基于哈希的类,彼此非常相似,并且用于创建Map。 Map接口是主要Collections Framework接口的最后一个,它定义了一组键与值的关联所支持的操作,其中键是唯一的。 这些Map实现基于哈希算法。 HashMap类实现无序映射,而LinkedHashMap类实现有序映射。 LinkedHashMap实现是HashMap类的子类,这意味着它继承了HashMap类的功能。 两者在性能方面没有太大差异。

HashMap和LinkedHashMap

什么是HashMap?

HashMap是Java中基于哈希算法的Map接口的最常见的实现方法之一,也是四个通用实现之一。它类似于集合类HashSet,尽管元素在两个类中都是无序的。它实现为哈希表,但与LinkedHashMap不同,它不对键或值保持任何顺序。通常,HashMap为放置和获取提供恒定时间的性能。该类不是线程安全的,但它允许一个null键和多个null值。由于它不维护迭代顺序,因此需要较少的内存。

什么是LinkedHashMap?

LinkedHashMap是Map接口的四个通用实现之一,它是HashMap类的子类,意味着它继承了其功能。尽管它在性能方面与HashMap非常相似,但它保持键的插入顺序,既可以将键插入Map的顺序,也可以在Map中访问条目的顺序。它通过保证迭代器返回其元素的顺序来细化其父类的协定。但是,它比HashMap需要更多的内存,因为它在Java中维护着一个双向链接列表。

HashMap和LinkedHashMap的区别

1. HashMap与LinkedHashMap的基础
HashMap是Java中基于哈希的Map接口实现。 映射是键-值对的集合,并且在列表位于有序集合中时使用。 HashMap是一个Collection类,将值存储在键值对中。 简单来说,它将键映射到值,这意味着它可以基于键来定位值。 LinkedHashMap和HashMap一样,是Map接口的链接列表实现,除了它维护插入到其中的元素的顺序。 它是HashMap的子类,继承了它的功能。 LinkedHashMap通过保证迭代器返回其元素的顺序来细化其父类HashMap的协定。

2. HashMap与LinkedHashMap迭代顺序
HashMap和LinkedHashMap之间的主要区别是顺序。 HashMap的元素不按顺序排列,完全随机,而LinkedHashMap的元素按顺序排列。 LinkedHashMap的条目按键插入顺序排列,这是在Map中插入键的顺序。这意味着将首先枚举插入到Map中的第一个键,与其关联的值也将首先枚举,并且最后插入枚举的最后一个条目也将被枚举。 LinkedHashMap具有可预测的迭代顺序,这意味着它也可以按访问顺序(即条目被访问的顺序)维护其元素。

3. 实现
HashMap和LinkedHashMap类都使用散列来实现Java中的Map接口,除了HashMap是作为哈希表实现的,而LinkedHashMap则维护一个遍历其所有条目的Bucket的双向链接列表。这就是为什么LinkedHashMap比HashMap需要更多内存的原因,因为与HashMap不同,它维护顺序。它消除了HashMap的混乱排序,而不会产生TreeMap否则会产生的额外费用。除此之外,LinkedHashMap类在很多方面与HashMap类非常相似,例如同步和空键/值,因为它们都允许一个空键和多个空值。

4. HashMap和LinkedHashMap的性能
尽管这两个类都提供可比较的性能,但是如果排序不是问题,则认为HashMap类是首选,因为它不能保证Map的迭代顺序。基于键添加,删除或查找条目等操作都是固定时间,因为它们会对键进行哈希处理。因此,在LinkedHashMap中添加,删除和查找条目可能比在HashMap中稍慢一些,因为它在Java中维护着一个双链桶列表。另外,因为没有顺序维护,所以HashMap比LinkedHashMap需要更少的内存。

总结

尽管HashMap和HashMap类的性能几乎相似,但是HashMap所需要的内存比LinkedHashMap少,因为它不能保证地图的迭代顺序,这使得在HashMap中添加,删除和查找条目的操作比执行HashMap的操作更快。 一个LinkedHashMap。 但是,两者之间的关键区别在于顺序:HashMap的元素不按顺序排列,而LinkedHashMap的元素默认按键插入顺序排列,这意味着将键插入映射的顺序。 LinkedHashMap也可以按访问顺序(即条目被访问的顺序)维护其元素。LinkedHashMap必须维护一个双向链接列表,它的性能低于HashMap。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:HashMap和LinkedHashMap
本文链接:https://www.vsdiffer.com/vs/hashmap-vs-linkedhashmap.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。