Map和List的对象是否是同一对象(并说明hash冲突)

2024-06-06 05:32

本文主要是介绍Map和List的对象是否是同一对象(并说明hash冲突),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先上代码,根据结果说明:

public static void testList(){Map<String, Object> map = new HashMap<>();for(int i = 0; i<10;i++){List<String> list = new ArrayList<>();list.add("1");map.put(String.valueOf(i), list);System.out.println("map.hashCode: "+map.get(String.valueOf(i)).hashCode());System.out.println("list.hashCode: "+list.hashCode());}System.out.println(map.get("1")==map.get("2"));System.out.println(map.get("1").hashCode());System.out.println(map.get("2").hashCode());}

结果是这样的:

(上面的hashcode是80是我的电脑上的,别的电脑可能就不是80)

上面代码的意思就是说:1、list里面放的值是一样,那么每次new出来的list的hashCode是一样,这样就会出现hash冲突。2、结果中的倒数第三个的false说明这两个list并不是同一个对象,及时是hashCode一样。

下面看另一段代码:

public static void testList(){Map<String, Object> map = new HashMap<>();for(int i = 0; i<10;i++){List<String> list = new ArrayList<>();list.add(String.valueOf(i));map.put(String.valueOf(i), list);System.out.println("map.hashCode: "+map.get(String.valueOf(i)).hashCode());System.out.println("list.hashCode: "+list.hashCode());}System.out.println(map.get("1")==map.get("2"));System.out.println(map.get("1").hashCode());System.out.println(map.get("2").hashCode());}

运行结果如下:

上面代码的意思就是说:1、list里面放的值不一样,那么每次new出来的list的hashCode也是一样,这也不会出现hash冲突了。2、结果中的倒数第三个的false说明这两个list并不是同一个对象,因为hashCode是一样。


总之:hashCode一样,但是对象并不一定是同一个对象,这样会出现hash冲突,hashCode不一样那么这个两个对象肯定不是同一个对象。

这篇关于Map和List的对象是否是同一对象(并说明hash冲突)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

JAVA覆盖和重写的区别及说明

《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性... 目录Java覆盖和重写的区别经常听到两种话认真读完上面两份代码JAVA覆盖和重写的区别经常听到两种话1.覆盖=重写。2.静态方法可andro

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分