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 方法判断两者是否相等。

  • 相关阅读:
    UVa 10118 记忆化搜索 Free Candies
    CodeForces 568B DP Symmetric and Transitive
    UVa 11695 树的直径 Flight Planning
    UVa 10934 DP Dropping water balloons
    CodeForces 543D 树形DP Road Improvement
    CodeForces 570E DP Pig and Palindromes
    HDU 5396 区间DP 数学 Expression
    HDU 5402 模拟 构造 Travelling Salesman Problem
    HDU 5399 数学 Too Simple
    CodeForces 567F DP Mausoleum
  • 原文地址:https://www.cnblogs.com/py1994/p/6680949.html
Copyright © 2011-2022 走看看