HashCode 重新

public boolean equals(Object o){
    if (this == o) {
        return true;
    }
    if(o instanceof Person){
        Person p=(Person) o;
        if(p.name==this.name){
            return true;
        }
    }
    return false;
}
public int hashCode(){
    return this.name.hashCode();
}
 
Person pa=new Person();
pa.setName("12");
Person pb=new Person();
pb.setName("12");
if(pa.equals(pb)){
    System.out.println("==");
}else{
    System.out.println("!=");
}
System.out.print(pa.hashCode()+"-----"+pb.hashCode());
目的是为了name相同就让 两个对象相同,而不是比较内存引用是否一致

`hashCode()` 是 Java 中 Object 类的一个方法,用于生成对象的哈希码(或称为散列值)。哈希码是一个整数,它是根据对象的内容计算得出的,通常用来快速定位到存储位置,比如在 HashMap、HashSet 或者 HashTable 这样的数据结构中。 以下是一些 `hashCode()` 的主要用法: 1. **查找和比较**:当你需要在一个集合(如 HashMap)中查找某个特定对象时,首先通过对象的 `hashCode()` 和 equals() 方法进行查找。如果两个对象具有相同的 `hashCode()` 并且 `equals()` 返回 true,则它们被认为是相等的。 ```java Map<String, Integer> map = new HashMap<>(); String key1 = "hello"; String key2 = "hello"; // 同一个字符串 Integer value = map.get(key1); // 如果 hashcode 相同,get 到的值就是 value // 对比 if (key1.hashCode() == key2.hashCode() && Objects.equals(key1, key2)) { System.out.println("Equal keys found"); } ``` 2. **冲突处理**:由于哈希码是通过算法计算得到的,可能会出现多个对象产生相同哈希的情况(哈希碰撞),这时就需要好的哈希函数设计以及合适的冲突解决策略,例如开放寻址法或链地址法。 3. **性能优化**:使用 `hashCode()` 可以加速搜索速度,特别是在大数据集上。如果你的数据结构要求快速查找,一个好的哈希函数可以使平均查找时间从线性降低到常量。 在自定义类中重写 `hashCode()` 和 `equals()` 时,要注意遵守一致性原则,即对于相同的实例,其哈希码应始终相同;并且对修改后的对象,如果逻辑上认为其不变,则 `hashCode()` 也应该保持不变。同时,为了保证正确性,`hashCode()` 和 `equals()` 应该满足某种数学关系,比如 `a.equals(b)` 必须意味着 `a.hashCode() == b.hashCode()`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值