HashMap 中的一个“坑”!(3)

简介: HashMap 中的一个“坑”!(3)

以上程序的执行结果如下:


微信图片_20220120233800.jpg


从上述结果可以看出,当使用 LinkedHashMap 替代了 HashMap  之后,返回的顺序就能和插入的顺序保持一致了。


LinkedHashMap 的魔力


为什么 HashMap 是无序的,而 LinkedHashMap 却是有序的呢?


这要从二者的实现说起了,LinkedHashMap 属于 HashMap 的子类,所以 LinkedHashMap  除了拥有 HashMap 的所有特性之后,还具备自身的一些扩展属性,其中就包括 LinkedHashMap 中额外维护了一个双向链表,这个双向链表就是用来保存元素的(插入)顺序的,这也是为什么 LinkedHashMap 可以实现访问顺序和插入顺序一致的原因了。


总结


本文演示了 HashMap 作为返回类型时隐藏的一个小“坑”,因为 HashMap 本身是无序的,所以它会导致查询顺序和插入顺序不一致的问题,对应的解决方案有两种:使用确定的数据类型来替代 HashMap,比如 List,或者使用有序的 LinkedHashMap 来替代无序的 HashMap。

相关文章
|
6月前
|
存储 安全 Java
HashMap的详细解读
HashMap的详细解读
58 0
|
1月前
|
存储 Serverless C++
c++实现HashMap
这篇文章提供了一个用C++实现的简单HashMap类的示例代码,包括构造函数、put、get、remove和size方法,以及私有的hash函数,用于计算键的哈希值。该HashMap使用链地址法解决哈希冲突,适用于学习和理解哈希表的基本概念。
15 0
|
5月前
|
存储 安全 Java
HashMap详解
HashMap详解
|
6月前
|
存储 算法 索引
|
6月前
|
Dart 算法 Java
HashMap的0.75可能只是一个经验值
HashMap的0.75可能只是一个经验值
|
存储 算法
详解HashMap
1.hash code hash code是使用hash函数运算得到的一个值,是对象的身份证号码,用于对象的辨重。在同一运行周期,对同一个对象多次调用hashcode(),只要是用于equals()的内容未变,那么每次得到的hash码也应该不变。,但不同运行周期间hash码可能会不同。
107 0
|
存储 缓存 Java
|
存储 算法 安全
【HashMap】
【HashMap】
127 0
|
存储 安全 算法
再聊 HashMap
HashMap特点: KV 结构,K、V 都允许 null 值; 线程不安全,运行速度快,存取速度快; 非线程安全的
再聊 HashMap
|
安全 算法 数据挖掘
厉害了!把 HashMap 剖析的只剩渣了!
很高兴遇见你~ HashMap是一个非常重要的集合,日常使用也非常的频繁,同时也是面试重点。本文并不打算讲解基础的使用api,而是深入HashM
厉害了!把 HashMap 剖析的只剩渣了!