当前位置: 首页 > news >正文

网站建设技术是干嘛的做图软件ps下载网站

网站建设技术是干嘛的,做图软件ps下载网站,计算机网站php设计代做,专业的seo搜索引擎优化培训【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法 【一】为什么有这个问题【二】Object类的中的hashcode方法和equals方法【三】重写hashcode【四】重写equals方法【五】hashmap中使用hashcode和equals方法 【一】为什么有这个问题 因为HashMa…

【HashMap】为什么用自定义的类做HashMap的Key时需要重写hashcode方法和equals方法

  • 【一】为什么有这个问题
  • 【二】Object类的中的hashcode方法和equals方法
  • 【三】重写hashcode
  • 【四】重写equals方法
  • 【五】hashmap中使用hashcode和equals方法

【一】为什么有这个问题

因为HashMap的key有个特征,就是key值不能重复,否则add的时候会覆盖。那么如果使用自定义的类做HashMap的key,就需要用到equals方法判断两个对象是否相等,判断的条件就是hashCode生成的哈希值。

Java中所有的类都是Object类的子类,所以自定义的类也是Object类的子类,Object中自带的hashcode方法和equals方法,如果不重写hashcode方法和equals方法,即使两个自定义类的对象内容完全相同,也不会判定为重复,这也就违背了HashMap的key不可重复的特点。

【二】Object类的中的hashcode方法和equals方法

Java中所有的类都是Object类的子类,Object中自带的hashcode方法,就是通过计算内存地址转换一个整数实现的,是一个native方法,返回值是int类型:

public native int hashCode();

Object中自带的equals方法,从源码中可以看出,就是将比较与被比较对象用==进行比较,用的还是比较hash值的方式

public boolean equals(Object obj) {return (this == obj);
}

【三】重写hashcode

如果不重写hashcode方法,那么即便是两个内容完全相同key对象,每次通过hashcode方法计算出的hash值也都是不一样的,因为是根据其对象所在内存地址计算的,因而做存储时也会被当作时不同的key;

重写hashcode方法该怎么写呢,这没有固定的格式,项目中看到很多中写法,列举两个

(1)如果是一个实体类,有唯一的字段id,那么可以利用该字段直接作为其hash值,如下

public class user{private int id;private String name;@overridepublic int hashcode(){return this.id;}
}

(2)也可以是如下写法,因为String类中已经重写了hashcode方法,所以当name值相同时,其对应hash值一定相同

public class User{private int id;private String name;@overridepublic int hashcode(){return id*name.hashcode;}
}

【四】重写equals方法

equals方法在上面已经介绍过了,其实就是用==进行比较,如果不重写那么即便是两个内容完全相同的对象,equals方法返回值依然是false,和hashcode类似也需要进行类似的方法重写:

(1)思路是先使用instanceof关键字判断这个被比较对象与对象是否属于一个类,返回值是true的话,再将二者转换成json字符串,最后通过String已经重写好了的equals方法进行比较,如下:

public class User{private int id;private String name;@overridepublic boolean equals(Object object){if(object instanceof User){User compareObj = (User)object;String soureStr = JsonUtils.objectToJson(this);String targetStr = JsonUtils.objectToJson(compareObj);return soureStr.equals(targetStr);}return false;}
}

【五】hashmap中使用hashcode和equals方法

举例,将一个对象user对象作为key存入hashmap当中,会经历以下流程,能够看出在判断两个对象是否相等时,要经过以下步骤:

(1)是先去判断二者的hash值是否相同,因为计算和比较hash值所耗费代价要远低于通过equals进行比较,所以先比较hash值也可以提高效率;
(2)如果比较结果不相等,则直接返回false;
(3)如果比较结果相等,则使用equals方法进行比较;
(4)如果相等,则返回true,如果不相等,则返回fasle。

在这里插入图片描述

总结:在hashmap中,对于两个对象的比较,都充分用到了key对象的hashcode方法和equals方法;

如果不重写hashcode方法,那么即便是两个内容完全一致的key对象,它仍会视为是不同的key,导致数据存取无法进行;

如果不重写equals方法,那么equals方法只是简单的将两个对象进行==比较,实际上也是通过对象间的内存地址进行比较,也导致上述情况的发生。

http://www.yayakq.cn/news/967237/

相关文章:

  • 济南百度推广排名优化关键词优化需要从哪些方面开展
  • 青浦华新网站建设做慕课的网站
  • 做网站怎么赚钱的市桥网站建设培训学校
  • html 做网站的模板济南网站建设山东聚搜网力推
  • 网站开发人员工具大连看妇科哪家医院好
  • 德阳网站seo学网络营销有用吗
  • 常州市钟楼区建设局网站网站设计方式
  • 怎么做微信电影网站建立网站心得
  • 在手机上做网站是什么软件谁有做爰网站
  • 建设银行信用卡官网站wordpress 无法验证ssl
  • 一键注册所有网站老师问我做网站用到什么创新技术
  • 网站增加二级域名企业网站推广定义
  • 动漫制作专业贵州有哪些大专院校seo实战优化
  • 同一网站相同form id广州网站开发建设
  • 贵阳专业建网站蝶恋直播免费下载
  • 网站建设管理规范WordPress打开速度不稳定
  • 做中国o2o网站领导云瓣科技做网站
  • 企业网站seo排名优化婚庆网站开发计划书
  • 外贸网站的域名跟犀牛云一样做网站的
  • 网页设计建立站点实验报告手机app开发教程视频
  • 专为网站做点击量wordpress fox
  • 土地流转网站建设报告杂网网站建设
  • 本地做织梦网站网站logo织梦怎么做
  • 网站seo优化费用wordpress登陆进去插件
  • 怎样做视频电影网站制作网站的费用
  • 浙江建设职业技术学院网站垂直网站内容建设
  • 农村基本制度建设网站做暧免费网站
  • 做网站需要准备什么展厅效果图
  • phpmysql网站个人虚拟机做网站
  • 怎么样建设自己网站怎么用php做网站方案