String重写equals() 和 hashCode() 对比 自定义类重写equals() 和 hashCode(),HashSet源码分析

本文介绍了HashSet如何通过重写equals()和hashCode()实现元素去重,深入解析其内部逻辑,包括JDK7与JDK8的区别,并给出了自定义类重写这两个方法的重要性。此外,还探讨了ArrayList中元素重写equals()方法的必要性,并提供了一个HashSet去重的小Demo。
摘要由CSDN通过智能技术生成
  1. String重写equals() 和 hashCode()
public boolean equals(Object anObject) {
   
   if (this == anObject) {
   
       return true;
   }
   if (anObject instanceof String) {
   
       String anotherString = (String)anObject;
       int n = value.length;
       if (n == anotherString.value.length) {
   
           char v1[] = value;
           char v2[] = anotherString.value;
           int i = 0;
           while (n-- != 0) {
   
               if (v1[i] != v2[i])
                   return false;
               i++;
           }
           return true;
       }
   }
   return false;
}

public int hashCode() {
   
   int h = hash;
   if (h == 0 && value.length > 0) {
   
       char val[] = value;

       for (int i = 0; i < value.length; i++) {
   
           h = 31 * h + val[i];
       }
       hash = h;
   }
   return h;
}

System.out.println("a".hashCode());//97
System.out.println("ab".hashCode());//3105
System.out.println("ab".hashCode() == "ba".hashCode());//false

  1. 自定义类重写equals() 和 hashCode()
import java.util.Objects;

public class Son extends Father{
   
    private String name;
    private int age;
    private int sex;
    public Son() {
   
    }

    public Son(String name) {
   
        this.name = name;
    }

    public Son(int age) {
   
        super(123);
        this.age = age;
    }

    public Son(String name, int age) {
   
        this(name);
    }

    public Son(String name, int age, int sex) {
   
        this(name, age);
        this.sex = sex;
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值