• 重写Object类的hashCode和equals方法的一次尝试


    ## 为什么重写?

    在项目开发中遇到需要将Object对象作为HashMap的key使用的场景,为了保证HashMap的key的唯一性,故对该对象进行了重写hashCode方法和重写equals方法。

    ## 代码示例

    package com.xxx.xxx;
    
    /**
    * @Author: 
    * @Date: 
    * @Description:
    */
    public class ColumnDTO {
    
    private String columnid;
    
    private String columnname;
    
    private String nodepath;
    
    private String upperid;
    
    private String linkurl;
    
    
    public String getColumnid() {
    return columnid;
    }
    
    public void setColumnid(String columnid) {
    this.columnid = columnid;
    }
    
    public String getColumnname() {
    return columnname;
    }
    
    public void setColumnname(String columnname) {
    this.columnname = columnname;
    }
    
    public String getNodepath() {
    return nodepath;
    }
    
    public void setNodepath(String nodepath) {
    this.nodepath = nodepath;
    }
    
    public String getUpperid() {
    return upperid;
    }
    
    public void setUpperid(String upperid) {
    this.upperid = upperid;
    }
    
    public String getLinkurl() {
    return linkurl;
    }
    
    public void setLinkurl(String linkurl) {
    this.linkurl = linkurl;
    }
    
    
    /**
    * 重写hashCode方法和equals方法,保证该对象可以当作HashMap的Key使用
    */
    
    @Override
    public int hashCode() {
    int result = 17;
    result = 31 * result + (columnid == null ? 0 : columnid.hashCode());
    result = 31 * result + (columnname == null ? 0 : columnname.hashCode());
    result = 31 * result + (nodepath == null ? 0 : nodepath.hashCode());
    result = 31 * result + (upperid == null ? 0 : upperid.hashCode());
    result = 31 * result + (linkurl == null ? 0 : linkurl.hashCode());
    return result;
    }
    
    @Override
    public boolean equals(Object obj) {
    if(this == obj){
    return true;//地址相等
    }
    
    if(obj == null){
    return false;//非空性:对于任意非空引用x,x.equals(null)应该返回false。
    }
    
    if(obj instanceof ColumnDTO){
    ColumnDTO other = (ColumnDTO) obj;
    //需要比较的字段相等,则这两个对象相等
    if(this.columnid.equals(other.columnid)
    && this.columnname.equals(other.columnname)
    && this.nodepath.equals(other.nodepath)
    && this.linkurl.equals(other.linkurl)
    && this.upperid.equals(other.upperid)){
    return true;
    }
    }
    return false;
    }
    }

    ## 突出重点及总结

    @Override
    public int hashCode() {
    int result = 17;
    result = 31 * result + (columnid == null ? 0 : columnid.hashCode());
    result = 31 * result + (columnname == null ? 0 : columnname.hashCode());
    result = 31 * result + (nodepath == null ? 0 : nodepath.hashCode());
    result = 31 * result + (upperid == null ? 0 : upperid.hashCode());
    result = 31 * result + (linkurl == null ? 0 : linkurl.hashCode());
    return result;
    }


    > 需要对每一个成员变量进行类似的hashCode处理,将最终的结果返回作为hashCode值。

    @Override
    public boolean equals(Object obj) {
    if(this == obj){
    return true;//地址相等
    }
    
    if(obj == null){
    return false;//非空性:对于任意非空引用x,x.equals(null)应该返回false。
    }
    
    if(obj instanceof ColumnDTO){
    ColumnDTO other = (ColumnDTO) obj;
    //需要比较的字段相等,则这两个对象相等
    if(this.columnid.equals(other.columnid)
    && this.columnname.equals(other.columnname)
    && this.nodepath.equals(other.nodepath)
    && this.linkurl.equals(other.linkurl)
    && this.upperid.equals(other.upperid)){
    return true;
    }
    }
    return false;
    }

    > 需要对每一个成员变量进行比较,所有成员变量都相同才返回true,否则返回false。

  • 相关阅读:
    模拟伪造浏览器并获取json数据:
    Inno Setup命令行安装卸载参数
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Dept实体类和对应的配置信息
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
    struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Emp实体类和对应的配置信息
    常用的字符串加密解密工具类
  • 原文地址:https://www.cnblogs.com/yuhuashang-edward/p/11015031.html
Copyright © 2020-2023  润新知