软件构造Lab4实验总结—equals()和hashCode()

在实验四debug修正完善过程中,发现自己的代码中很多类都只写了equals()方法,却没有完成hashCode()方法,故对这两个方法进行学习并在此进行记录。
1、简单概念
hashCode()方法与equals()方法作用相同,都是用来比较两个对象是否一致,而相比于equals()较复杂的实现,hashCode()只要return一个hash值即可实现比较,效率无疑高了很多,之所以在类中需要把两个方法均Override,其原因主要是根据hashCode()的返回值定义,不同的对象也有可能有相同的返回值,所以这个方法并不是一定可靠,然而equals()方法对两个对象的所有内容进行比较,其结果也是可靠的。因此我们可以得出:equal()相等的两个对象他们的hashCode()肯定相等,hashCode()相等的两个对象他们的equal()不一定相等。 因而对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以每当需要对比的时候,先用hashCode(),如果返回值不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象一定相同,这样既提高了效率也保证了正确性。
2、具体实现
因为较为简单,所以直接上代码,对于我使用过的IDEA和eclipse两个IDE,这两种方法的Override都是可以通过编译器自动生成的。

public class Student {  
    private int age;  
    private String name;  
    public Student() {  
    }  
    public Student(int age, String name) {  
        this.age = age;  
        this.name = name;  
    }  
    
    @Override  
    public int hashCode() {  
        final int prime = 31;  
        int result = 1;  
        result = prime * result + age;  
        result = prime * result + ((name == null) ? 0 : name.hashCode());  
        System.out.println("hashCode : "+ result);  
        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 (age != other.age)  
            return false;  
        if (name == null) {  
            if (other.name != null)  
                return false;  
        } else if (!name.equals(other.name))  
            return false;  
        return true;  
    }  
      
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值