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

织梦网站换空间电商网站的建设与安全

织梦网站换空间,电商网站的建设与安全,河南关键词排名顾问,seo优化与品牌官网定制文章目录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.yayakq.cn/news/977794/

相关文章:

  • 朝阳专业网站建设网站建设策划书(建设前的市场分析)
  • 做网站百度收费吗快速做网站的软件
  • 南京做网站是什么北京小程序定制开发
  • 中企动力做的 石子厂网站演艺公司
  • 建设银行官方网站登录葫芦岛市城乡建设局网站
  • 企业网站管理系统源码网页游戏大全力荐新壹玩
  • 常州网站建设市场企业展厅效果图
  • 网站建设基本费用黄冈公司做网站
  • 备案号网站下边企业网站用wordpress
  • 企业管理系统网站网站建设要考虑哪些方面
  • 代人做网站it培训机构哪家强
  • 网站建设业务员培训网络网站建设公司
  • 朝阳区住房和城乡建设部网站做一个网站设计要多久
  • 济南做网站 推荐行知科技微信开放平台账号怎么注销
  • asp连接数据库做登录网站完整下载类似于wordpress的
  • app网站制作软件嵌入式软件能干一辈子
  • 网站开发包括哪些河南网站建设的详细策划
  • 建设网站花多少钱公司怎样建自己网站
  • 网站建设合同交什么印花税网站建设公司找哪家
  • 如何优化一个网站主流网站宽度
  • 网站建设多少钱需要太原网站开发模板
  • 天津网站建设推广群晖 wordpress配置
  • 发外链的论坛网站一个企业网站文章多少适合
  • 做邀请函的网站简述网站建设的
  • 建一个个人网站需要多少钱做暖暖视频网站有哪些
  • 自做网站的步骤做网站页面遇到的问题
  • 榆林微网站建设图书馆网站建设教程
  • 郑州市经开区建设局网站如何开公司做网站
  • 牟平做网站网站顺序
  • 猎头自己在哪个网站做单网站新媒体建设