`

两种简单的方式快速实现hashCode 和 equals方法

    博客分类:
  • Java
 
阅读更多

http://hi.baidu.com/coolcat_police/item/8d248d02289a9bef359902a6

 

我们在写domain model类, 有时候需要重写hashCode和equals,以便可以把这个类当成List或者Map的Key来用。

    有两种方法可以很方便地去帮我们实现:

1. 使用eclipse工具。右击代码->Source->Generate hashCode and equals()...

    eclispe会根据你的model类里面的属性,帮你生成hashCode和equals方法,例如

public class Test implements Serializable {

private String id;

 

private String name;

 

public String getId() {

return id;

}

 

public void setId(String id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((id == null) ? 0 : id.hashCode());

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

 

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Test other = (Test) obj;

if (id == null) {

if (other.id != null)

return false;

}

else if (!id.equals(other.id))

return false;

if (name == null) {

if (other.name != null)

return false;

}

else if (!name.equals(other.name))

return false;

return true;

}

 

}

 

 

2. 如果觉得hashCode和equals方法看上去不够简洁,可以使用org.apache.commons.lang.builder.HashCodeBuilder和org.apache.commons.lang.builder.EqualsBuilder

public class Test implements Serializable {

private String id;

 

private String name;

 

public String getId() {

return id;

}

 

public void setId(String id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

@Override

public int hashCode() {

return new HashCodeBuilder().append(this.id).append(this.name)

.toHashCode();

}

 

@Override

public boolean equals(Object obj) {

if (!(obj instanceof Test)) {

return false;

}

 

Test o = (Test) obj;

 

return new EqualsBuilder().append(this.id, o.id).append(this.name,

o.name).isEquals();

}

}

 

----------------------------------------------------------------------------------------------------------

 

this is another example:

 

  1. public class Student {  
  2.     private int age;  
  3.     private String name;  
  4.     public Student() {  
  5.     }  
  6.     public Student(int age, String name) {  
  7.         super();  
  8.         this.age = age;  
  9.         this.name = name;  
  10.     }  
  11.     public int getAge() {  
  12.         return age;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setAge(int age) {  
  18.         this.age = age;  
  19.     }  
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.     @Override  
  24.     public int hashCode() {  
  25.         final int prime = 31;  
  26.         int result = 1;  
  27.         result = prime * result + age;  
  28.         result = prime * result + ((name == null) ? 0 : name.hashCode());  
  29.         System.out.println("hashCode : "+ result);  
  30.         return result;  
  31.     }  
  32.     @Override  
  33.     public boolean equals(Object obj) {  
  34.         if (this == obj)  
  35.             return true;  
  36.         if (obj == null)  
  37.             return false;  
  38.         if (getClass() != obj.getClass())  
  39.             return false;  
  40.         Student other = (Student) obj;  
  41.         if (age != other.age)  
  42.             return false;  
  43.         if (name == null) {  
  44.             if (other.name != null)  
  45.                 return false;  
  46.         } else if (!name.equals(other.name))  
  47.             return false;  
  48.         return true;  
  49.     }  
  50.       
分享到:
评论

相关推荐

    java中hashcode和equals的详解.pdf

    本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java 集合的实现原理和哈希表的工作机制。 一、...

    set接口经常用的hashCode和equals方法详解

    在这个例子中,`equals`方法根据`name`和`age`属性来判断两个`Person`对象是否相等,而`hashCode`方法也综合考虑了这两个属性,以确保`equals`方法返回`true`的对象具有相同的哈希码。 #### 七、总结 在Java中,...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

    hashcode和equals的分析

    ### hashCode和equals方法详解 #### 一、hashCode方法解析 在深入探讨`hashCode`方法之前,我们需要了解Java集合框架的基本概念。Java集合框架主要包括两大类集合:`List`和`Set`。 - **List**:这是一个有序集合...

    java中hashcode()和equals()方法详解

    以下是一个简单的类`Person`,展示了如何正确覆盖`equals()`和`hashCode()`方法: ```java public class Person { private String name; private int age; public Person(String name, int age) { this.name = ...

    深入 HashCode 方法~

    ### 深入理解 HashCode 方法 #### 一、HashCode 的基本概念与...通过合理地设计和实现 `HashCode`,可以大大提高程序的运行效率和性能。对于自定义类来说,正确地重写 `hashCode()` 和 `equals()` 方法是非常必要的。

    java中hashcode()和equals()的详解

    在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...

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

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的成员,尤其是在处理对象比较和集合操作时。这两个方法通常与`Object`类中的默认实现相关联,但为了在实际开发中实现正确的对象比较和哈希表操作...

    重写equals方法

    这是因为哈希算法需要使用 hashCode 方法来计算对象的哈希值,而 equals 方法用于判断两个对象是否相等。 如何重写 equals 方法? ------------------------- 重写 equals 方法需要遵循以下规则: 1. 参数类型和...

    详解hashCode()和equals()的本质区别和联系

    从 Object 类的源代码中可以看到,equals() 方法的实现非常简单,仅仅是比较两个对象的引用是否相同。因此,如果我们直接使用 Object 类的 equals() 方法来比较两个对象,结果将是比较它们的内存地址是否相同,而...

    java中hashcode()和equals()的详解.docx

    - **一致性**:在覆盖`equals()`方法时,也需要确保同时覆盖`hashCode()`方法,并且两个方法的实现要保持一致,以避免潜在的哈希冲突问题。 - **性能考量**:在设计`hashCode()`方法时,应尽可能选择分布均匀的哈希...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,本文将详细介绍这两个方法,并结合ArrayList、Vector和LinkedList三个常见的容器集合。 一、equals方法 equals方法是Java中用于比较两个对象是否...

    javahashcode()和equals()和==的介绍和区别.pdf

    在Java编程中,`hashCode()`、`equals()`以及`==`是三个经常被提及的概念,它们在处理对象的...特别是在使用`HashMap`、`HashSet`等数据结构时,合理的`hashCode()`和`equals()`实现能够显著提升查找和插入操作的速度。

    C# Equals 和 GetHashCode 方法重写

    在这个例子中,我们实现了 `IEquatable<Person>` 接口,并提供了两种版本的 `Equals` 方法实现。第一种是 `object` 类型的参数版本,它会检查传入的对象是否为 `null` 或者类型是否相同;第二种是泛型版本,直接比较...

    java中Hashcode的作用.docx

    Hashcode和equals方法是紧密相连的两个概念。在Java中,如果两个对象的equals方法返回true,那么这两个对象的Hashcode一定相同。反之,如果两个对象的Hashcode相同,那么这两个对象不一定是相等的。 Hashcode只是一...

    HashCode的用法详解

    在实际应用中,我们需要同时重新定义 equals() 和 hashCode() 方法,以便确保对象的唯一性。 例如,在 HashSet 中,我们需要定义 equals() 方法,以便判断两个对象是否相等。如果我们不定义 equals() 方法,那么同...

    ==和equals方法究竟有什么区别

    在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...

    深入HashCode

    在哈希表中,`hashCode()`被用来计算对象存储的位置,因为哈希表通过对象的哈希值来确定其存储位置,从而实现快速查找。理想情况下,不同的对象应有不同的哈希码,但相同的对象(根据`equals()`方法判断相等)必须...

Global site tag (gtag.js) - Google Analytics