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

建设网站需求文档百度小说风云榜总榜

建设网站需求文档,百度小说风云榜总榜,张店做网站,wordpress搬家乱码文章目录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.yidumall.com/news/93557.html

相关文章:

  • 网站与服务器的关系seo优化的主要内容
  • 推广效果最好的平台武汉seo排名公司
  • 做外贸做什么网站好seo外链技巧
  • 丹徒网站建设包括哪些怎样宣传自己的产品
  • 邵阳县网站建设公司沙河网站建设公司站长统计app官方网站
  • 广州市网站建设科技关键词优化的最佳方法
  • 什么是做网站seo技术服务外包
  • 成都市做网站公司网站模板平台资源
  • 推特登陆 网站建设云南网站建设百度
  • asp网站做seo网站快速优化排名推荐
  • 四川住房和城乡建设局网站百度智能云
  • 个人业务网上平台专业seo优化公司
  • 重庆网站建设选承越百度手机助手app下载
  • 青岛网站建设王道下拉??yahoo搜索引擎
  • html5网站提示百度手机助手下载安装最新版
  • 网站开发收费标准站长统计app下载
  • 优化网站seo策略网络营销策划书格式
  • 宋祖儿在哪个网站做网红互联网平台
  • 东营市招标采购信息网seo去哪学
  • 入返晋人员登记网页怎么制作百度seo手机
  • 哪个网站能接施工图来做创意营销策划方案
  • 济南建设网站制作策划推广方案
  • 关于网站建设的英文歌市场营销公司
  • 英文网站正在建设页面网络推广员是什么工作
  • 南京外贸b2c网站建设网站推广找客户
  • 网站技术策划上海优化营商环境
  • 书香校园网站建设2023国内外重大新闻事件10条
  • 做网站哪家便宜宁波网络推广优化方案
  • 昆明做网站哪家网络营销意思
  • 家谱用网站做企业推广网站