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

建设网站需求文档南京seo培训

建设网站需求文档,南京seo培训,天津建设网站,长沙招聘信息2022文章目录hashCode 和 equals 的处理1. 阿里巴巴编程规范要求2. equals和hashcode的分析2.1 Object方法2.2 只覆写(Override)equals带来的问题问题演示问题分析问题处理hashCode 和 equals 的处理 1. 阿里巴巴编程规范要求 2. equals和hashcode的分析 2…

文章目录

  • hashCode 和 equals 的处理
  • 1. 阿里巴巴编程规范要求
  • 2. equals和hashcode的分析
    • 2.1 Object方法
    • 2.2 只覆写(Override)equals带来的问题
      • 问题演示
      • 问题分析
      • 问题处理

hashCode 和 equals 的处理

1. 阿里巴巴编程规范要求

在这里插入图片描述

2. equals和hashcode的分析

2.1 Object方法

java中,所有类都直接或间接继承自java.lang.Object类,也就是Object是java中所有类的祖先即根类

equals和hashcode是Object类提供的方法:
在这里插入图片描述

  • hashcode方法:返回的是一个对象的hash码,是由Object类本地方法生成的
  • equals方法:比较的对象的引用地址

在Java的一些集合类中,一般会重写这两个方法。 在比较两个对象是否相等时候,会根据以下规则,会先调用对象的hashCode方法得到hashCode进行比较,如果hashCode不相同,就可以直接认为这两个对象不相同,如果hashCode相同,那么就会进一步调用equals方法进行比较,而equals方法,就是用来最终确认两个对象是否相等的。

通常equals方法比较重,逻辑比较多,而hashCode方法主要就是得到一个哈希值,实际上是一个数字,相对而言比较轻,所以比较两个对象时,通常会先根据hashCode比较一下

2.2 只覆写(Override)equals带来的问题

如果只覆写(equals)而不复写hashcode,可能导致导致equals相等,而hashcode不相等,在使用HashMap进行存储时候会出现问题

问题演示

public class Person {private String name;public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return Objects.equals(name, person.name);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}
public class TestHashMap {public static void main(String[] args) {Map<Person, String> map = new HashMap<>();map.put(new Person("Kevin"),"Hi");System.out.println(map.get(new Person("Kevin")));}
}

执行结果:

null

问题分析

因为散列结合是使用 hashCode 来计算 key 的存储位置,如果存储两个完全相同的对象,但是有不同的 hashcode 就会导致这两个对象存储在 hash 表的不同位置,当我们想根据这个对象去获取数据的时候,就会出现一个完全相同的对象会在存储在 hash 表的两个位置。

问题处理

重写hashCode方法
重新equals方法一定要重写hashCode方法

public class Person {private String name;public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +'}';}
}

再次执行结果:

Hi
http://www.15wanjia.com/news/48341.html

相关文章:

  • 做网站是否需要自购服务器搜索引擎大全网址
  • 个人网页网站制作模板seo网站推广计划
  • 最有设计感的网站互联网营销案例分析
  • 网站设计照着做 算侵权吗竞价推广外包
  • 网络架构ossseo推广岗位职责
  • 手机怎么防止网站自动跳转培训机构需要什么资质
  • 自己做的网站如何加视频教程semiconductor
  • 常见的网络营销推广方式有哪些seo网站推广专员
  • 做设计的一般在什么网站找素材四年级小新闻50字左右
  • 如何在社交网站上做视频推广上海关键词排名优化公司
  • 榆林做网站的公司电商的运营模式有几种
  • 网站开发+演讲对seo的理解
  • 网站设计研究方法微信附近人推广引流
  • 深圳网站制作公司地址互联网营销培训平台
  • 健身网站怎么做今日新闻头条最新消息
  • wordpress官方下载 免费完整版石家庄seo报价
  • 创办网站需要多少钱企业网站代运营
  • 汕头有哪些需要建网站的公司广安网站seo
  • 广州网站建设索王道下拉太原seo全网营销
  • 佛山网站建设是哪个网站维护费一年多少钱
  • wordpress怎么滚动图片佛山seo网站排名
  • 网站的排版苏州网站建设书生商友
  • wordpress网站代码郴州网站建设网络推广平台
  • 可以做物理题的网站在线培训系统
  • 网站制作合同注意事项做一个个人网站
  • 兼职做任务的网站网站推广营销的步骤
  • 春蕾科技 网站建设常见的网络营销方式有哪几种
  • 建设网站培训网络软营销
  • php做的网站如何发布网络服务投诉平台
  • 河北省建设厅网站6百度官方免费下载