HashMap有序性与无序性阐述
1.插入无序
public class HashMapTest {public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put("Liyuanfang", "射手");map.put("Yuange", "刺客");map.put("Zhugeliang", "法师");map.put("Xiahoudun", "坦克");map.put("Guiguzi", "辅助");System.out.println("第一次输出:");for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println(entry.getKey());}System.out.println("\n第二次输出:");for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println(entry.getKey());}}
}
自己运行一下就能看到,输出顺序与插入顺序无关。
2.遍历有序
public class HashMapTest {public static void main(String[] args) {HashMap<String, String> map1 = new HashMap<>();map1.put("Liyuanfang", "射手");map1.put("Yuange", "刺客");map1.put("Zhugeliang", "法师");map1.put("Xiahoudun", "坦克");map1.put("Guiguzi", "辅助");System.out.println("map1循环遍历:");for (map1.Entry<String, String> entry : map1.entrySet()) {System.out.println(entry.getKey());}HashMap<String, String> map2 = new HashMap<>();map2.put("Liyuanfang", "射手");map2.put("Yuange", "刺客");map2.put("Zhugeliang", "法师");map2.put("Xiahoudun", "坦克");map2.put("Guiguzi", "辅助");System.out.println("map2循环遍历:");for (map2.Entry<String, String> entry : map2.entrySet()) {System.out.println(entry.getKey());}}
}
两个Map,put的key值相同,但是两个Map最后循环遍历输出的key顺序却不一样。
3.HashMap的一些特性
- HashMap的数据结构:数组+单链表,当存在hashCode相同的不同对象时,会将value以单链表的形式,往后追加。数组加快访问速度,单链表解决hash值冲突
- 调用put方法时,发生了什么:根据key的hashCode,计算出将key放入数组的index下标,index= (数组长度 - 1) & hashCode
- HashMap循环遍历的顺序:根据数组顺序+单链表顺序进行输出。虽然遍历时,用的EntrySet,但是可以简单理解为,两层循环输出数据,外层循环为遍历数组,内层循环为遍历单链表
- HashMap在初始化时,默认初始容量为16,以及默认的扩容因子0.75
4.分析
基于HashMap的特性:
HashMap<String, String> map2 = new HashMap<>(map1.size());
即:map2的初始化容量=map1.size()。
这个设置,导致相同的key,在put到map2时,计算出的index值,与map1中的不一样
因为计算index时,依赖于数组的长度(参考上面:put方法调用说明)
5.结论
- 若两个Map的初始化容量不一致,就算同时插入相同的key,最后输出的顺序,不一定一致
- 想要依赖Map保持有序性,请使用LinkedHashMap 或 直接new HashMap<>()
第二个代码段,如果将:
HashMap<String, String> map2 = new HashMap<>(map1.size());
修改成:
HashMap<String, String> map2 = new HashMap<>();
那么 map1 和 map2的输出顺序是一致的。
HashMap有序性与无序性阐述相关推荐
- HashMap散列无序存储测试
为什么80%的码农都做不了架构师?>>> package com.boonya.map; import java.util.HashMap; import java.util. ...
- .NET(C#):警惕PLINQ结果的无序性
.NET(C#):警惕PLINQ结果的无序性 2012年08月10日 ⁄ 综合 ⁄ 共 620字 ⁄ 字号 小 中 大 ⁄ 评论关闭 PLINQ的运行结果是无序的,也就是不保持原来集合的顺序来操作(当 ...
- golang map的无序性验证
map的无序性 大量数据如果没有写入,只是读取不会出错 var wg sync.WaitGroupm := make(map[int]int)for i := 0; i < 10000; i++ ...
- 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结
0. 前言: 激光雷达作为自动驾驶不可或缺的传感器,随着价格不断下降,各种基于深度学习的模型也层出不穷(坐等马斯克打脸); 激光雷达物体识别的任务: 输入: 激光点云(x, y, z, intensi ...
- 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。
import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...
- C# 实现多分屏视频播放-自定义控件集合无序性问题
参考:自定义控件使其填充方格且自动变换大小文章,据此生成了多分屏的视频播放器.这里需要注意Controls的数组的无序性. 这里看下自定义控件的代码: using System; using Syst ...
- HashMap遍历有序性问题——map.entrySet()的无序性
在LeetCode刷题的时候,在一道返回 字符串中最早出现的只出现一次的字符下标的题目中,使用大HashMap的遍历方式,我选择了使用map.entrySet()获取节点集合的方式进行遍历. 题目和代 ...
- 点云的无序性_PU-Net:解决3D点云数据的上采样问题
作者:Danny明泽 论文下载: https://openaccess.thecvf.com/content_cvpr_2018/papers/Yu_PU-Net_Point_Cloud_CVPR_2 ...
- 拒绝传统电销无序性,智能外呼系统规范电销全流程
电销模式的存在由来已久,也在时间的长河里迭代更新,最早期一个小规模的公司,配备几个人+几台座机,就可以风生水起地开展业务,再后来连座机都不用,人手一个手机就可以随时随地做电销,但随着社会经济的发展和市 ...
最新文章
- IE6左右边框断线现象
- python中线条颜色_python中plot用法——线条、点、颜色
- linux安装redis插件,Linux平台安装redis及redis扩展的方法
- sql server中case when的用法
- svnsync 服务器代码备份
- poj 2503 Babelfish trie树!!!!指针版和数组版 基础
- 第七次会议(4.22)
- 【Android 10 源码】深入理解 MediaCodec configure
- LaTeX详细安装步骤和简明教程
- 波束形成(最大信噪比准则、LCMV、MSC、LMS、RLS)
- 电箱吉他与原声吉他的区别在哪里?初学者应该选哪个呢?
- 图像处理基本方法-python语言生成纯色BMP文件
- 2021年美容师(初级)考试资料及美容师(初级)
- linux centos7 iptables配置
- java.lang.IllegalArgumentException: Failed to decrypt.
- T1加权像(T1 weighted image,T1WI)
- 崔发周 教育部计算机,高等职业技术教育人才培养目标体系及其构建_崔发周
- 遗传算法:交叉操作 NWOX 2006
- USB、串口、422、485、CAN接口互转模块
- 软件工程的前景与发展
热门文章
- 怎么利用群控解决问题
- linux系统安装搜狗输入法
- the android sdk location cannot be at the filesystem root. 问题解决
- FastAPI上传POST嵌套JSON对象及List列表BaseModel,python
- python爬虫之爬取起点中文原创小说排行榜
- 彻底解决PPt一直弹出mathtype错误信息
- Angular CLI ng常用命令整理
- 【转】键盘灯亮无反映解决方法
- 直播间自动发言互动的思路和实现步骤,和打包成APP的方法
- java.io.FileNotFoundException: D:\hadoop (拒绝访问。)