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

徐州市建设监理协会网站企业策划 企业网站建设 品牌设计

徐州市建设监理协会网站,企业策划 企业网站建设 品牌设计,做图表好用网站或软件,百度关键词在线优化关于这个问题,看了网上很多答案,感觉都参差不齐,没有答到要点,这次就记录一下! 首先我们为什么要重写equals?这个方法是用来干嘛的? public boolean equals (Object object&#x…

关于这个问题,看了网上很多答案,感觉都参差不齐,没有答到要点,这次就记录一下!

首先我们为什么要重写equals?这个方法是用来干嘛的?

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

 上面是在Object类里面的定义,可以看到它的作用仅仅是用来确认两个对象地址是否一样!

那实际当中我们肯定不满足于这个方式啊!我们一般是想知道两个对象里面的数据是否对的上!

最直接的例子就是String!这里官方给我们重写了equals方法,从而使得我们在进行比较不同的string的时候比较的不是它们的地址,而是字面值!!!具体源码大家可以自己去看。

我这里也定义了一个类,然后演示一下重定义equals前后的结果:

public class People {private String name;public People(String name){this.name=name;}public void setName(String name) {this.name = name;}public String getName() {return name;}public String toString(){return "Peopel"+"name:"+name;}}
public class a {public static void main(String[] args) {People hj=new People("wx");People nn=new People("wx");System.out.println(hj.equals(nn));}
}

 

这是测试主类,输出是false!(两个对象地址不一样,当时输出false,因为这个时候我们没有重写equals方法!!!) 但是实际当中我们当然期望是true!因为这里两个对象里面属性是完全一样。

那么我们重写一下,看看最后的结果!

public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;People other = (People) obj;if (name != other.name)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}

 上面是重写的方法,具体的话大家自己看,逻辑也很清楚!

这次我们实现了输出true(开心)

 --------------------------------------------------------------------------------------------------------------------------------至此我们搞懂了重写equals的目的!!

下面正式进入主题!hashcode!

首先定义一下hashcode:它是一个函数,将对象映射成一个整数

那么大家会说,这个函数是什么?

(165条消息) Java 的 HashCode 底层生成分析_董酷酷的博客-CSDN博客_hashcode底层

具体大家可以看这个链接,给大家总结一下哈,这个函数一般是伪随机数生成函数,和对象地址是无关的!(除非你指定编译器参数)

 那么我们为啥要重写这个函数呢?

让含有相同参数的对象 映射成相同的hashcode!!!(这句话很关键,我下面的阐述都是基于此展开的)

有人有会问为什么要映射成相同的hashcode呢?那我举个最简单的例子吧!

我现在有个hashmap,对象为k,v就是1

当你第一次 push一个对象(参数是a)后

第二次 push一个对象(参数也是a)

正常来说我们希望,后面的put操作会覆盖前面的

但如果你不重写hashcode就不会实现覆盖,map里会包含两个对象

这是因为hashmap put的原理是,首先判断对象的hashcode,如果不等,直接判断为不同的key,如果相等,则执行equals方法来看是否相同

下面是代码!

public class a {public static void main(String[] args) {HashMap<People,Integer> map=new HashMap();People cxk=new People("wx");map.put(cxk,1);People yyqx=new People("wx");map.put(yyqx,1);map.forEach((k,v)->{System.out.println(k);});}
}

这是测试类,最后结果是:

 那我们重写hashcode后:

 ok,实际上重写hashcode主要保证的是一致性:相同参数的对象映射到相同的hash值,从而保证我们在集合里面能够正确的实现。

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

相关文章:

  • 大型网站开发项目合同兰州新区城乡建设局网站
  • wordpress制作数据可视化镇江seo
  • 天津整站网页设计板式重构
  • 网站尺寸网页制作基础教程课程标准
  • 江宁网站建设要多少钱免费申请一个不花钱网站
  • 晋中建设机械网站湘潭做网站 磐石网络
  • 浙江省建设厅新网站人员无法查询高速公路建设网站
  • 网站做桌面应用 iOS简约大气的ppt模板免费下载
  • 能直接用网站做海报吗网站导航是什么
  • 做网贷网站多少钱node做网站怎么知道蜘蛛来过
  • 亚马逊商标备案是否必须做网站哪个网站做美食视频网站
  • 海口公司网站建设fullpage网站怎么做
  • 自己做电台直播的网站免费商标logo在线制作软件
  • 嘉兴网站建设推荐太原建设工程信息网站
  • 兰州城建设计院网站网站建设陕icp
  • 济宁网站建设专家网站建设费用会计科目
  • 网站设计0基础哈尔滨网站小程序制作
  • 义乌商城集团的网站建设安阳区号后三位
  • 做网站开发的公司销售创建一个自己的公司翻译
  • 电子商务网站建设发展报告网站规划的步骤
  • 知春路网站建设邯郸房产网签查询网
  • 织梦网站 数据库网站建设的评价
  • 怎么做外网的网站出售企业网站备案资料
  • 四川省建设厅网站官网个人登录html模板素材
  • 门户网站 字体学编程官网
  • 青岛网站建设和优化千元低价网站建设
  • 潍城区住房和城乡建设局网站免费做网站怎么做网站
  • 厦门营销网站制作专业关键词优化平台
  • 创建网站需要注意的问题学广告设计
  • 第二季企业网站开发wordpress 网站加速