import java.util.HashMap;
/**
* 验证即使有了equals,还需要hashcode的情况
* @author microsoft
*
*/
public class Person {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public static void main(String args[]) {
Person p = new Person();
p.id = "123";
Person pp = new Person();
pp.id = "321";
HashMap map = new HashMap();
map.put(p, "p1");
map.put(pp, "p2");
Person pNew = new Person();
pNew.id = "123";
System.out.print(map.get(pNew));
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(this==obj) return true;
if(!(obj instanceof Person)){
return false;
}
return ((Person)obj).id.equals(id);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return Integer.parseInt(this.id);
}
}
display result is:"p1"
if no funcation hashCode() ,the result is null;
if no funcation equals(),the result alse is null;
so for the right result,these two funcations "equals()" and "hashcode()" is needed.
分享到:
相关推荐
在 Java 中,hashCode 是 Object 类中的一个方法,默认情况下,该方法会将对象的内部地址转换成一个整数。然而,在实际应用中,我们需要重新定义 hashCode 方法,以便满足我们的需求。 例如,我们可以将对象的某个...
- 对于不同的类,默认情况下,`hashCode()` 方法的实现可能会有所不同,但通常会依赖于对象的一些关键属性来生成一个整数值作为 `HashCode`。 2. **自定义类中的 HashCode 实现**: - 当我们自定义一个类时,通常...
重写 `hashCode()` 方法时,我们需要确保当两个对象满足 `equals()` 的条件时,它们的哈希码也相同。同时,为了提高性能,我们应该尽量让不同的对象产生不同的哈希码。例如,对于上述Person类,可以这样重写 `...
实现`hashCode()`时,需要考虑以下几点: 1. **唯一性**:尽量让不同的对象拥有不同的哈希码,避免哈希冲突。 2. **稳定性**:对于相等的对象,`hashCode()`的值必须相同。 3. **效率**:尽可能快速地计算哈希码,...
equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的...在实际开发中,我们需要根据具体情况来重写这两个方法,以确保对象的正确比较和哈希码计算。
### HashCode的作用详解 #### 一、HashCode的基本概念 在Java中,`hashCode()` 方法是 `Object` 类的一个重要成员方法,它返回一个整数,这个整数...开发者应当充分理解其工作原理,并结合实际情况进行适当的优化。
通常情况下,如果两个对象相等(即`equals`方法返回`true`),那么它们的`hashCode`值也应当相等。这是因为,如果两个相等的对象具有不同的`hashCode`值,可能会导致在某些场景下出现问题,比如在`HashSet`或`...
默认情况下,`hashCode()` 返回对象的内存地址的某种表示,但通常我们需要重写这个方法,使得具有相同逻辑内容的对象返回相同的哈希码。 2. **equals()**:同样来自Object类,它用于比较两个对象是否相等。默认行为...
理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式中支持散列可以促进基于散列的容器的开发和使用。本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()...
反之,如果两个对象的`hashCode()`值相同,则还需要进一步通过`equals()`方法来确定这两个对象是否真正相等。 #### 实现细节 在上面的代码示例中,`Person1`类重写了`hashCode()`方法: ```java public int ...
然而,对于自定义类,通常我们需要重写`equals()`来根据类的业务逻辑来判断对象内容是否相等,例如比较两个Person对象的姓名和年龄是否相同。 `hashCode()`方法则与`equals()`密切相关,它返回一个整数值,代表对象...
5. 使用场景:ArrayList适合需要按顺序访问元素的情况,HashSet适合需要快速查找、插入和删除且不关心顺序的场景。 在实际开发中,选择ArrayList还是HashSet应根据具体需求来决定。理解这两个数据结构的特点以及...
3. 创建匿名类实例:在某些情况下,编译器可能不允许直接创建匿名类的实例。但是,通过反射,我们可以创建并初始化这些类,使得我们可以在运行时动态地扩展已有类的功能。 4. 泛型的类型擦除:Java泛型在编译后会被...
- 为了避免哈希冲突带来的性能问题,在覆盖`equals()`方法的同时,通常也需要覆盖`hashCode()`方法。 #### 实现示例 以下是一个简单的类`Person`,展示了如何正确覆盖`equals()`和`hashCode()`方法: ```java ...
深入解析Java对象的equals()和hashCode()的使用 在Java语言中,equals()和hashCode()两个函数的使用是紧密...equals()和hashCode()函数的使用是紧密配合的,需要遵循一定的规则和要求,才能确保整个程序的正常运行。
当同时重写 `equals()` 和 `hashCode()` 时,需要注意的一点是,如果 `equals()` 返回true,那么两个对象的 `hashCode()` 必须相等。反之则不一定,因为不同的对象可能会产生相同的哈希码。这就是为什么在设计类时,...
因此,重写`equals()`时,通常也需要重写`hashCode()`。 `toString()` 方法返回一个表示该对象的字符串。默认情况下,`toString()`返回的是类名和对象的哈希码。但在实际开发中,我们通常会重写这个方法,提供更...
通常情况下,先通过`hashCode`值进行初步筛选可以显著提高性能,因为计算`hashCode`值比调用`equals`方法更快。 #### 四、案例分析 假设有一个类`Person`,包含`name`和`age`两个属性: ```java public class ...
在Java编程语言中,序列化(Serialization)和重写`hashCode`及`equals`方法是两个重要的概念,它们各自有着特定的用途,并且在某些情况下相互关联。下面将详细阐述这两个概念及其应用。 首先,Java序列化是将一个...
通常情况下,hashcode 方法需要和 equals 方法一起使用,以确保两个对象的散列码相同,如果它们的内容相同。 例如,在 HashSet 中,我们可以使用 hashcode 方法来比较两个对象是否相同。如果两个对象的散列码相同,...