Java 重写equals()与hashCode()方法

List对象的contains方法实际上也是调用的equals()方法来进行逐条对比的。

 示例代码:

package com.imooc.collection;

/**
 * 课程类
 */

public class Course {
    private String id;
    private String name;

    public Course(){

    }

    public Course(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public void setId(String id){
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    /**
     * 重写 Course类的 Equals方法
     * @param obj
     * @return
     */
    @Override
    public boolean equals(Object obj){
        if(this == obj) {
            return true;
        }

        if(obj == null) {
            return false;
        }

        if(!(obj instanceof Course)){
            return false;
        }

        Course course = (Course) obj;
        if(this.name.equals(course.name) && this.id.equals(course.id)) {
            return true;
        }
        return false;
    }

}

Set对象的contains方法跟List实现方式不一样,是先调用hashCode()方法返回hash码,如果hash码一致,再调用equals()方法。

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
原文地址:https://www.cnblogs.com/vincenshen/p/10159264.html