`
sunrise353
  • 浏览: 75726 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

需要hashcode的情况

    博客分类:
  • J2SE
阅读更多

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.
分享到:
评论

相关推荐

    HashCode的用法详解

    在 Java 中,hashCode 是 Object 类中的一个方法,默认情况下,该方法会将对象的内部地址转换成一个整数。然而,在实际应用中,我们需要重新定义 hashCode 方法,以便满足我们的需求。 例如,我们可以将对象的某个...

    深入 HashCode 方法~

    - 对于不同的类,默认情况下,`hashCode()` 方法的实现可能会有所不同,但通常会依赖于对象的一些关键属性来生成一个整数值作为 `HashCode`。 2. **自定义类中的 HashCode 实现**: - 当我们自定义一个类时,通常...

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

    重写 `hashCode()` 方法时,我们需要确保当两个对象满足 `equals()` 的条件时,它们的哈希码也相同。同时,为了提高性能,我们应该尽量让不同的对象产生不同的哈希码。例如,对于上述Person类,可以这样重写 `...

    深入HashCode

    实现`hashCode()`时,需要考虑以下几点: 1. **唯一性**:尽量让不同的对象拥有不同的哈希码,避免哈希冲突。 2. **稳定性**:对于相等的对象,`hashCode()`的值必须相同。 3. **效率**:尽可能快速地计算哈希码,...

    equals与hashCode方法讲解

    equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的...在实际开发中,我们需要根据具体情况来重写这两个方法,以确保对象的正确比较和哈希码计算。

    hashcode的作用

    ### HashCode的作用详解 #### 一、HashCode的基本概念 在Java中,`hashCode()` 方法是 `Object` 类的一个重要成员方法,它返回一个整数,这个整数...开发者应当充分理解其工作原理,并结合实际情况进行适当的优化。

    hashCode的作用

    通常情况下,如果两个对象相等(即`equals`方法返回`true`),那么它们的`hashCode`值也应当相等。这是因为,如果两个相等的对象具有不同的`hashCode`值,可能会导致在某些场景下出现问题,比如在`HashSet`或`...

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

    默认情况下,`hashCode()` 返回对象的内存地址的某种表示,但通常我们需要重写这个方法,使得具有相同逻辑内容的对象返回相同的哈希码。 2. **equals()**:同样来自Object类,它用于比较两个对象是否相等。默认行为...

    Java理论与实践:hashCode()和equals()方法

    理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式中支持散列可以促进基于散列的容器的开发和使用。本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()...

    复写hashCode()方法,和equasl()方法

    反之,如果两个对象的`hashCode()`值相同,则还需要进一步通过`equals()`方法来确定这两个对象是否真正相等。 #### 实现细节 在上面的代码示例中,`Person1`类重写了`hashCode()`方法: ```java public int ...

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

    然而,对于自定义类,通常我们需要重写`equals()`来根据类的业务逻辑来判断对象内容是否相等,例如比较两个Person对象的姓名和年龄是否相同。 `hashCode()`方法则与`equals()`密切相关,它返回一个整数值,代表对象...

    Java基础加强_ArrayList_HashSet的比较及Hashcode分析

    5. 使用场景:ArrayList适合需要按顺序访问元素的情况,HashSet适合需要快速查找、插入和删除且不关心顺序的场景。 在实际开发中,选择ArrayList还是HashSet应根据具体需求来决定。理解这两个数据结构的特点以及...

    利用反射绕过编译器和hashcode高级应用

    3. 创建匿名类实例:在某些情况下,编译器可能不允许直接创建匿名类的实例。但是,通过反射,我们可以创建并初始化这些类,使得我们可以在运行时动态地扩展已有类的功能。 4. 泛型的类型擦除:Java泛型在编译后会被...

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

    - 为了避免哈希冲突带来的性能问题,在覆盖`equals()`方法的同时,通常也需要覆盖`hashCode()`方法。 #### 实现示例 以下是一个简单的类`Person`,展示了如何正确覆盖`equals()`和`hashCode()`方法: ```java ...

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

    深入解析Java对象的equals()和hashCode()的使用 在Java语言中,equals()和hashCode()两个函数的使用是紧密...equals()和hashCode()函数的使用是紧密配合的,需要遵循一定的规则和要求,才能确保整个程序的正常运行。

    Java_重写equals()和hashCode()

    当同时重写 `equals()` 和 `hashCode()` 时,需要注意的一点是,如果 `equals()` 返回true,那么两个对象的 `hashCode()` 必须相等。反之则不一定,因为不同的对象可能会产生相同的哈希码。这就是为什么在设计类时,...

    equals,hashcode,toString

    因此,重写`equals()`时,通常也需要重写`hashCode()`。 `toString()` 方法返回一个表示该对象的字符串。默认情况下,`toString()`返回的是类名和对象的哈希码。但在实际开发中,我们通常会重写这个方法,提供更...

    hashcode与eqault比较

    通常情况下,先通过`hashCode`值进行初步筛选可以显著提高性能,因为计算`hashCode`值比调用`equals`方法更快。 #### 四、案例分析 假设有一个类`Person`,包含`name`和`age`两个属性: ```java public class ...

    java 序列化和重写 hashCode 的原因

    在Java编程语言中,序列化(Serialization)和重写`hashCode`及`equals`方法是两个重要的概念,它们各自有着特定的用途,并且在某些情况下相互关联。下面将详细阐述这两个概念及其应用。 首先,Java序列化是将一个...

    Java中equals,hashcode和==的区别

    通常情况下,hashcode 方法需要和 equals 方法一起使用,以确保两个对象的散列码相同,如果它们的内容相同。 例如,在 HashSet 中,我们可以使用 hashcode 方法来比较两个对象是否相同。如果两个对象的散列码相同,...

Global site tag (gtag.js) - Google Analytics