zoukankan      html  css  js  c++  java
  • 重写HashCode和equals规范

          hashcode 和 equals 方法是用来鉴定2个对象是否相等。

          一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用 ,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。 举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。

      如下:

    package utils;
    
    public class Student {	
    	private int id;
    	private String name;
    	
    	@Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime * result + id;
    		return result;
    	}
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		Student other = (Student) obj;
    		if (id != other.id)
    			return false;
    		return true;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

      测试类

    package utils;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Test {
    	public static void main(String[] args) {
    		Map<Student,String> map = new HashMap<Student,String>();
    	
    		Student e = new Student();
    		e.setId(1);
    		e.setName("lol");
    		
    		Student e1 = new Student();
    		e1.setId(1);
    		e1.setName("lol");
    		//商业逻辑是对象中值相等就相等,所以我们需要重写它的 hashCode方法
    		map.put(e, "1421801Z");
    		map.put(e1, "1421801Z");
    		System.out.println(map.toString());
    		
    	}
    }
    

      结果:

      没有重写HashCode 和 equals 方法

      

      重写HashCode 和 equals 方法

      

    总结分析:

      HashCode 方法是根据实体类中某些属性来重写的,上面的id 就是学生的学号(主键)。

      equals 方法的比较类型如上。

    HashCode 和 equals 方法是map、set容器用来解决重复值得一个工具,当map、set在添加东西进去的时候,首先它会

    调用HashCode 方法,由于每个对象都有唯一的Hash码所以是不同的,但是我们可以通过重写HashCode 来达到当“值”相等的情况下,默认相等。

    然后再去调用equals 方法判断两者是否相等。

  • 相关阅读:
    vue使用Highcharts图表
    Laya 骨骼动画播放
    unity3d学习笔记
    unity学习笔记
    Laya本地存储对象,读取上来之后没有类方法了
    Laya2学习笔记
    Laya vscode f5断点调试开启
    fairyGUI学习笔记
    使用docker安装swoole环境
    docker学习笔记
  • 原文地址:https://www.cnblogs.com/py1994/p/6680949.html
Copyright © 2011-2022 走看看