`
zengshaotao
  • 浏览: 792910 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

重写了equals,请重写hashcode方法

 
阅读更多

package web;

/**
 * 在每个重写了equals方法的类中,你必须也要重写hashCode方法。如果不这样做的话,
 * 就会违反Object.hashCode的通用约定,
 * 从而导致该类无法与所有基于散列值(hash)的集合类结合在一起正常运行。
 * hashCode()的返回值和equals()的关系如下:
        如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。
        如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等
       
 * hashCode()返回该对象的哈希码值,该值通常是一个由该对象的内部地址转换而来的整数,
 * 它的实现主要是为了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。
 *
 * @author zengst
 *
 */
public class HashCodeEquals {
 public static void main(String args[]) {
  Student s1 = new Student("张三", 21);
  Student s2 = new Student("张三", 21);

  String aa="ddd",bb="ddd";
  int aah = aa.hashCode();
  int bbh = bb.hashCode();
  System.out.println(aah+"\r\n"+bbh);
  if (s1.equals(s2)) {
   System.out.println("s1的代码:" + s1.hashCode() + "  s2的代码:"
     + s2.hashCode());
  } else {
   System.out.println("不相同");
  }
 }
}


class Student {
 private int age;
 private String name;
 
 public Student() {
 }

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

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public String getName() {
  return name;
 }

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

 public int hashCode() {
  return (this.name.hashCode() + this.age) * 31;
 }

 public boolean equals(Object obj) {
  boolean result = false;
  if (obj == null) {
   result = false;
  }
  if (this == obj) {
   result = true;
  }

  if (obj instanceof Student) {
   Student stu = (Student) obj;
   if (stu.getName().equals(this.name) && stu.getAge() == (this.age)) {
    result = true;
   }

  } else {
   result = false;
  }
  return result;
 }
}

分享到:
评论

相关推荐

    Java重写equals同时需要重写hashCode的代码说明

    Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    以下是对`equals()` 和 `hashCode()` 方法的详细解释及其重写的重要性。 **1. equals() 方法** `equals()` 方法用于比较两个对象是否相等。默认情况下,`equals()` 检查两个对象是否是同一个对象(即内存地址是否...

    Java_重写equals()和hashCode()

    总之,理解并正确重写 `equals()` 和 `hashCode()` 方法对于编写高质量的Java代码至关重要,这直接影响到对象比较的逻辑以及使用哈希表的数据结构的效率。通过遵循上述原则和最佳实践,我们可以确保对象的比较行为...

    关于重写equals,hashcode以及compareTo方法!

    关于重写equals、hashcode以及compareTo方法! equals()方法是Object类中的一个方法,它用于比较两个对象是否相等。然而,它的默认实现是比较对象的引用(地址),而不是比较对象的实际内容。因此,在某些情况下,...

    重写equals方法

    第二种情况:对于采用哈希算法的集合,集合中对象必须重写 hashCode 方法,同时也要重写 equals 方法。这是因为哈希算法需要使用 hashCode 方法来计算对象的哈希值,而 equals 方法用于判断两个对象是否相等。 如何...

    java中为何重写equals时必须重写hashCode方法详解

    当我们在自定义类中重写 `equals()` 方法时,通常也需要重写 `hashCode()` 方法,这是为了遵循一些重要的原则和保证数据结构如 `HashMap`、`HashSet` 的正确行为。 首先,`equals()` 方法用于比较两个对象是否相等...

    为什么重写equals方法,还必须要重写hashcode方法

    为什么重写equals方法,还必须要重写hashcode方法

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...

    Java重写equals及hashcode方法流程解析

    "Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object...同时,我们还需要注意到,重写equals方法时,必须重写hashCode方法,以便于确保对象的正确性和一致性。

    重写hashCode()和equals()方法详细介绍

    如果我们重写了`equals()`方法来基于`name`和`age`判断两个`Coder`对象是否相等,那么我们也应该重写`hashCode()`,使具有相同`name`和`age`的`Coder`对象产生相同的哈希码。通常,`hashCode()`的实现会结合所有参与...

    why在重写equals时还必须重写hashcode方法分享

    在Java编程语言中,`equals()` 和 `hashCode()` 方法对于对象的比较和处理至关重要,特别是在集合框架中。这两个方法有着紧密的联系,因为它们在决定对象是否相等以及如何存储和检索对象时起到关键作用。 首先,让...

    为什么在重写 equals方法的同时必须重写 hashcode方法

    因此,为了保证对象在集合中的正确行为,当重写 `equals` 方法时,必须同时重写 `hashCode` 方法,确保相等的对象具有相同的哈希值。这样,集合可以正确地识别和处理相等的对象,避免数据一致性问题。同时,遵循这个...

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...

    如何在IDEA中对 hashCode()和 equals() 利用快捷键快速进行方法重写

    请注意,当你重写`equals()`时,始终应该同时重写`hashCode()`,以保持一致性。不这样做可能会导致集合行为异常,特别是当尝试添加或查找对象时。在进行集合操作时,遵循`equals()`和`hashCode()`的约定是非常重要的...

    equals方法的重写.docx

    #### 二、为什么需要重写equals方法? 1. **提高程序效率**:当两个对象具有相同的业务逻辑上的“身份”时,它们应该被认为是相等的。 2. **增强代码可读性**:重写后的`equals`方法可以根据实际需求来判断对象是否...

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们与对象的比较和哈希表(如 `HashMap`)的操作密切相关。在面试中,面试官提出的问题直指这两个方法的重要关联。 首先,`equals()` ...

    equals与hashCode在实际开发中的重写写法

    在使用 `HashSet`、`HashMap` 等数据结构时,如果重写了 `equals()` 方法但没有重写 `hashCode()` 方法,可能会导致预期的行为不一致。因为这些数据结构依赖于 `hashCode()` 来确定对象的存储位置,而 `equals()` 来...

    【面试】hashCode与equals两者之间的关系 / == 和equals / 为什么要重写equals方法 / 重写equals /hashcode方法 / 为什么要重写hashCode方法

    3、**为什么要重写equals()方法?** 默认情况下,`equals()`方法继承自`Object`类,比较的是对象的引用。在处理自定义类时,我们可能关心的是对象的属性是否相等,而不是它们的内存地址。因此,为了基于对象的内容...

    关于Object中equals方法和hashCode方法判断的分析

    "关于Object中equals方法和hashCode方法判断的分析" 在 Java 中,Object 类提供了两个重要的方法:equals 方法和 hashCode 方法。这两个方法都是用于比较两个对象是否相等的,但它们的实现机理和作用域却有所不同。...

    解析Java对象的equals()和hashCode()的使用

    hashCode()函数返回的是一个用来进行赫希操作的整型代号,请不要把这个代号和前面所说的参照变量所代表的代号弄混了。后者不仅仅是个代号还具有在内存中才查找对象的位置的功能。hashCode()所返回的值是用来分类对象...

Global site tag (gtag.js) - Google Analytics