`
chenguanwei2008
  • 浏览: 121067 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

equals()与hashcode()方法

    博客分类:
  • J2SE
 
阅读更多

两个方法都来自Object。通常,比较两个对象是否相等时,我们需要重写equals()方法。hashcode方法主要作为集合类中判断对象是否重复的依据。

 

比如一个Point类,没有重写hashcode()方法。

public class Point {

	private int x;
	
	private int y;
	
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	@Override
	public boolean equals(Object obj) {
		Point p = null;
		if(obj instanceof Point) {
			p = (Point)obj;
		}
		return (p.getX() == x) && (p.getY() == y);
	}


	@Override
	public String toString() {
		return "Point:[" + x + "," + y + "]";
	}
	
	
}

 

@Test
	public void testHashCodeInSet() {
		Point p1 = new Point(2,2);
		Point p2 = new Point(2,2);
		Set<Point> s = new HashSet<Point>();
		s.add(p1);
		s.add(p2);
		assertEquals(s.size(), 2);
		
	}

 以上代码测试运行通过,为什么呢,因为Point没有重写hashcode()方法,HashSet判断是否存在重复元素是使用Object类实现的hashcode()方法,它是对对象地址的比较,因此p1与p2不相等。HashSet类将2个point都添加进去了。

 

另:

equals()相等的两个对象,hashcode()一定相等。
equals()不相等的两个对象,hashcode()可能相等也可能不等。
hashcode()不等的两个对象,equals()一定不等。
hashcode()相等的两个对象,equals()可能相等,也可能不等。

分享到:
评论

相关推荐

    equals与hashCode方法讲解

    equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java...

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

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

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

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

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

    本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。

    equals,hashcode,toString

    `hashCode()` 方法则与`equals()`密切相关。在哈希表(如HashMap、HashSet)中,对象的哈希码用于快速定位对象存储的位置。当两个对象通过`equals()`方法判断为相等时,它们的`hashCode()`方法返回值也应该相等。...

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

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

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

    在某些情况下,我们需要重写hashcode()方法,使其生成对象的哈希码,并且使其与equals()方法保持一致。 例如,在Hashtable、HashMap、HashSet、LinkedHashMap等容器中,我们需要重写hashcode()方法,使其生成对象的...

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    Java中的equals和hashCode方法详解1

    在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...

    Java中equals,hashcode和==的区别

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

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

    "Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将...

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

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

    深入理解equals和hashCode方法

    但是,我们在重写equals方法时,也需要重写hashCode方法,以保证对象的哈希码与equals方法的结果一致。 equals和hashCode的关系 equals和hashCode方法之间存在紧密的关系。在重写equals方法时,我们也需要重写...

    Java equals 方法与hashcode 方法的深入解析.rar

    在Java编程语言中,`equals()`方法和`hashCode()`方法是两个非常重要的概念,它们主要用于对象的比较和哈希表的高效运作。本解析将深入探讨这两个方法的用途、实现原理以及它们之间的关联。 首先,`equals()`方法是...

    ordinary-zhang#java#equals和hashcode方法详解1

    1.概述 2.为什么重写equels方法要重写hashcode方法 3.例子

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

    ### Java中`hashCode()`与`equals()`方法详解 #### 前言 在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将...

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

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

    equals-hashcode-processor-1.0.0.zip

    在Scala中,正确实现`equals`和`hashCode`方法对于集合操作至关重要,因为它们影响了对象在Set和Map中的存储和查找。这个处理器可能提供了一种自动化的方式来生成这些方法,避免了手动实现时可能出现的错误和不一致...

    equals 和 hashCode两者效果分析详解.docx

    在Java编程语言中,`equals()`和`hashCode()`方法是两个非常重要的概念,尤其是在处理对象比较和容器(如HashMap和HashSet)操作时。这两个方法在Java的类库中有着核心地位,尤其是对于类实例的比较和存储。接下来,...

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

    1、**hashCode与equals两者之间的关系**: 当我们说两个对象`equals()`返回`true`时,意味着它们在逻辑上是相等的。根据Java规范,如果两个对象相等(即`equals()`返回`true`),那么它们的`hashCode()`方法必须...

Global site tag (gtag.js) - Google Analytics