HashMap前后顺序put的数值教训总结

2024-06-09 19:08

本文主要是介绍HashMap前后顺序put的数值教训总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、层级结构是Map<Object,Map<o,list>>需要进行排序

使用HashMap赋值,最前面的放在前面put,后面的不需要展示的放在后面put,理论上是可以有顺序的,可是结果并不是这样:


public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {test2();}public  static  void  test2(){HashMap<String ,String> old=new HashMap();HashMap<String ,String>  newHash=new HashMap();HashMap newOrderHash=new HashMap();old.put("1","1");old.put("2","2");old.put("3","3");old.put("4","4");
//        newHash.put("5","5");
//        newHash.put("3","5555555555555");
//        newHash.put("6","6");
//        newHash.put("7","7");newHash.put("3","323333");newHash.put("4","44444444");newHash.putAll(old);System.out.println("newHash:"  +"   value:" );for (String  key:newHash.keySet()){System.out.println("key:" +key+"   value:" +newHash.get(key));}old.putAll(newHash);System.out.println("old" );for (String  key:old.keySet()){System.out.println("key:" +key+"    value:" +old.get(key));}}/****  结论D:\root\JDK8\bin\java.exe "-javaagent: newHash:   value:key:1   value:1key:2   value:2key:3   value:3key:4   value:4oldkey:1    value:1key:2    value:2key:3    value:3key:4    value:4*/

也就是说putALL并不会把原来的数值覆盖掉

2、现在的HashMap会对put数值进行重新排序


public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {test2();}public  static  void  test2(){HashMap<String ,String> old=new HashMap();HashMap<String ,String>  newHash=new HashMap();HashMap<String ,String>  newOrderHash=new HashMap();old.put("1","1");old.put("2","2");old.put("3","3");old.put("4","4");newHash.put("5","5");newHash.put("3","5555555555555");newHash.put("6","6");newHash.put("7","7");newHash.put("1","3233333333333");newHash.put("4","4444444444444");System.out.println("-------------如何重新排序--------------" );for (String  key:old.keySet()){if(newHash.containsKey(key)){newOrderHash.put(key,newHash.get(key));}}for (String  key:newOrderHash.keySet()){System.out.println("key:" +key+"    value:" +newOrderHash.get(key));}System.out.println("-------------重新排序--------------" );for (String  key:old.keySet()){newOrderHash.putIfAbsent(key,old.get(key));}for (String  key:newOrderHash.keySet()){System.out.println("key:" +key+"    value:" +newOrderHash.get(key));}}/****  结论-------------如何重新排序--------------key:1    value:3233333333333key:3    value:5555555555555key:4    value:4444444444444-------------重新排序--------------key:1    value:3233333333333key:2    value:2key:3    value:5555555555555key:4    value:4444444444444Process finished with exit code 0*/

3、即使乱序,目前HashMap依然会对put数值进行排序整理

 

public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {test2();}public  static  void  test2(){HashMap<String ,String> old=new HashMap();HashMap<String ,String>  newHash=new HashMap();HashMap<String ,String>  newOrderHash=new HashMap();old.put("3","3");old.put("4","4");old.put("1","1");old.put("2","2");newHash.put("5","5");newHash.put("3","5555555555555");newHash.put("6","6");newHash.put("7","7");newHash.put("1","3233333333333");newHash.put("4","4444444444444");System.out.println("-------------如何重新排序--------------" );for (String  key:old.keySet()){if(newHash.containsKey(key)){newOrderHash.put(key,newHash.get(key));}}for (String  key:newOrderHash.keySet()){System.out.println("key:" +key+"    value:" +newOrderHash.get(key));}System.out.println("-------------重新排序--------------" );for (String  key:old.keySet()){newOrderHash.putIfAbsent(key,old.get(key));}for (String  key:newOrderHash.keySet()){System.out.println("key:" +key+"    value:" +newOrderHash.get(key));}}/****  结论-------------如何重新排序--------------key:1    value:3233333333333key:3    value:5555555555555key:4    value:4444444444444-------------重新排序--------------key:1    value:3233333333333key:2    value:2key:3    value:5555555555555key:4    value:4444444444444Process finished with exit code 0*/

4、教训总结是:HashMap依旧会对key值进行排序

public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {test2();}public  static  void  test2(){HashMap<String ,String>  newHash=new HashMap();newHash.put("1","1");newHash.put("2","2");newHash.put("7","7");newHash.put("8","3233333333333");newHash.put("5","5");newHash.put("3","5555555555555");newHash.put("6","6");newHash.put("4","4444444444444");System.out.println("-------------如何重新排序--------------" );for (String  key:newHash.keySet()){System.out.println("key:" +key+"    value:" +newHash.get(key));}}/***-------------如何重新排序--------------key:1    value:1key:2    value:2key:3    value:5555555555555key:4    value:4444444444444key:5    value:5key:6    value:6key:7    value:7key:8    value:3233333333333Process finished with exit code 0*/

 

这篇关于HashMap前后顺序put的数值教训总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046044

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自