重新计算对象的哈希码

重新计算对象的哈希码

java语言中创建的对象是保存在堆中的,为了提高查找的速度而使用了散列查找。散列查找的基本思想是定义一个键来映射对象所在的内存地址。当需要查找对象时,直接查找键就可以了,这样就不用遍历整个堆来查找对象了。这次我们查看不同对象的散列值。
在项目中创建Cat类,在类中定义4个成员变量分别表示猫咪的名字、年龄、重量和体色,并提供构造方法来设置这些属性值。本类的重点在于重写equals()方法与hashCode()方法。重写equals()方法可以比较两个对象是否相同,重写hashCode()方法可以让相同的对象保存在相同的位置。具体代码如下

package ace;
import java.awt.Color;
public class Cat {
private String name;
private int age;
private double weight;
private Color color;
public Cat(String name,int age,double weight,Color color) {
 this.name=name;
 this.age=age;
 this.weight=weight;
 this.color=color;
}
@Override
public boolean equals(Object obj) { //利用属性判断猫咪是否相同
 if(this==obj) {                    //如果两个猫咪是同一个对象则相同
  return true;
 }
 if(obj==null) {                    //如果两个猫咪中有一个为null则不同
  return false;
 }
 if(getClass()!=obj.getClass()) {  //如果两个猫咪的类型不同则不同
  return false;
 }
 Cat cat=(Cat) obj;
 return name.equals(cat.name)&&(age==cat.age)
   &&(weight==cat.weight)&&(color.equals(cat.color));//比较猫咪的属性
}
@Override
public int hashCode() {             //重写hashCode()方法
 return 7*name.hashCode()+11*new Integer(age).hashCode()+13
   *new Double(weight).hashCode()+17*color.hashCode(); 
}
 }  

在ace包中创建Test类文件,在该类的main方法中创建3只猫咪,并为其初始化,然后输出猫咪的哈希码和比较的结果,代码如下

package ace;
import java.awt.Color;
public class Test {
public static void main(String[] args) {
 Cat cat1=new Cat("miao",12,21,Color.BLACK);
 Cat cat2=new Cat("mi",12,21,Color.WHITE);
 Cat cat3=new Cat("miao",12,21,Color.BLACK);
 System.out.println("猫咪1号的哈希码:"+cat1.hashCode());
 System.out.println("猫咪2号的哈希码"+cat2.hashCode());
 System.out.println("猫咪3号的哈希码"+cat3.hashCode());
    System.out.println("猫咪1号是否与猫咪2号相同:"+cat1.equals(cat2));
    System.out.println("猫咪1号是否与猫咪3号相同"+cat1.equals(cat3));
 }
}

最后运行结果如下图所示
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值