在HashMap中,为什么不能使用基本数据类型作为key?

其实和HashMap底层的存储原理有关,HashMap存储数据的特点是:无序、无索引、不能存储重复元素。

存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其equals方法进行比较,如果返回true,则认为是相同的对象,不存储,如果返回false,则认为是不同的对象,可以存储到HashMap集合中。

之所以key不能为基本数据类型,则是因为基本数据类型不能调用其hashcode()方法和equals()方法,进行比较,所以HashMap集合的key只能为引用数据类型,不能为基本数据类型,可以使用基本数据类型的包装类,例如Integer Double等。

当然,在HashMap存储自定义对象的时候,需要自己再自定义的对象中重写其hashCode()方法和equals方法,才能保证其存储不重复的元素,否则将存储多个重复的对象,因为每new一次,其就创建一个对象,内存地址是不同的。

另:HashMap中key是可以为null, 只能存储一个null, 因为计算key的hash值的时候,如果key为null, 则其hash值为0

HashMap集合中key只能为引用数据类型,不能为基本类型相关推荐

  1. 【转】HashMap集合中key只能为引用数据类型,不能为基本类型

    在HashMap中,为什么不能使用基本数据类型作为key? 其实和HashMap底层的存储原理有关,HashMap存储数据的特点是:无序.无索引.不能存储重复元素. 存储元素采用的是hash表存储数据 ...

  2. java map移除key为空_Java实现过滤掉map集合中key或value为空的值示例

    本文实例讲述了Java实现过滤掉map集合中key或value为空的值.分享给大家供大家参考,具体如下: import java.util.Collection; import java.util.H ...

  3. Java过滤掉map集合中key或value为空的值

    import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.M ...

  4. Java将map置空_Java实现过滤掉map集合中key或value为空的值示例

    Java实现过滤掉map集合中key或value为空的值示例 发布时间:2020-09-16 23:26:14 来源:脚本之家 阅读:147 作者:May的博客 本文实例讲述了Java实现过滤掉map ...

  5. java中数组的引用是什么意思_java中的数组是引用数据类型。

    [判断题]合金的组元决定了合金的性能 . [单选题]下列分子中存在分子内氢键的是 [单选题]下列电子构型中,不属于基态原子电子构型的是 [判断题]面心立方晶格的纯铁较体心立方晶格的纯铁强度高 [判断题 ...

  6. java中的五种引用数据类型(对象类型)

    注意,不是JVM中的四种引用类型:强.软.弱.虚引用. 详见我的另一篇文章<JVM中的四种引用类型> Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注 引用类型:底层结构和 ...

  7. EL表达式, JSTL, 获取map集合中key的value

    序言:今天在项目中使用了map存储list和普通对象,但是在jsp中显示的时候出来问题,后经查阅,终于解决,现在记录一下,以便以后查阅: 一:后台代码如下: package cn.gov.csrc.c ...

  8. 在python中、int表示的数据类型是_python--002--数据类型(int、str)

    1. 整型 int int().bit_length() v = int("a", base=16) #表示以16进制转换a print(v) age= 5r= age.bit_l ...

  9. Spring-Bean依赖注入(引用数据类型和集合数据类型)

    为什么使用spring依赖注入详见–>依赖注入分析 1.创建实体类User类 package com.hao.domain;public class User {private String n ...

最新文章

  1. TCP协议经典数据--TCP/IP高效编程 : 改善网络程序的44个技巧
  2. Log4j详细介绍(七)----日志格式化器Layout
  3. 细学PHP 09 MySql
  4. leetcode950. 按递增顺序显示卡牌
  5. apache mod_xsendfile提高php文件下载速度的方法
  6. 2021年商业地产趋势洞察白皮书
  7. sql语句创建唯一索引
  8. java jaxb 格式化_XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
  9. Apache Tika 内容抽取工具集合
  10. 【WP开发】JSON数据的读与写
  11. 同花顺 sendmessage python_进程通信-SendMessage使用方法
  12. 2019年最新全国省市区街道共46462条数据(统计局MySQL数据库)
  13. 51单片机复习:红外通信
  14. linux怎么取消光盘,怎样取消ubuntu官方光盘
  15. 由《爆裂鼓手》引发的产品思考
  16. 玩转Linux与运维岗(21)
  17. oppo手机安装应用失败,提示版本不兼容
  18. 创新创业大赛计算机,计算机学院第六届创新创业大赛圆满结束
  19. Linux公社 学习连接
  20. 模块“Upgrade”启动失败。 未能启动虚拟机。虚拟机VMware不支持的硬件版本【终极解决方案】

热门文章

  1. 神经网络是算法还是模型,神经网络 图像相似度
  2. 一夜之间ChatGPT火遍全球,程序员的饭碗保不住了吗
  3. IOT演进,数据觉醒
  4. 坯子库曲面推拉教程_坯子助手下载_坯子助手最新版下载-下载之家
  5. GitHub 搜索使用姿势
  6. oracle aix 11.2.0.3,Oracle 11.2.0.3 Database for AIX bug导致ORA-04030的报错
  7. 窄带物联网(NB-IoT)科技的关键技术是什么?
  8. e代驾——打造代驾服务标准化平台
  9. jsencrypt-RSA加密
  10. 我要让一些好习惯替换掉坏习惯