`

equals()和hashCode()方法

    博客分类:
  • java
 
阅读更多
Student.java代码如下:
package com.bean;

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

	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		if(obj instanceof Student){
			Student s = (Student)obj;
			if(this.name.equals(s.name)&&(this.num==s.num)){
				return true;
			}
		}
		return false;		
	}
	
	public int hashCode(){
		return num*name.hashCode();
	}

	public String toString(){
		return num+":"+name;
	}

}



Department.java代码如下:
package com.bean;

/**
 * 设计这个类的原因是想让两个对象的hashCode相同
 * @author yangjianzhou
 *
 */
public class Department {
	
	private int number;
	
	private int id;
	
	public Department(int number,int id){
		this.number = number;
		this.id = id;
	}
	
	public int hashCode(){
		return id+number;
	}
	
	public boolean equals(Object obj){
		if(this == obj){
			return true;
		}
		if(obj instanceof Department){
			Department dept = (Department)obj;
			if(this.number == dept.number&&this.id==dept.id){
				return true;
			}
		}
		return false;
	}

}



Test.java代码如下:
package com.test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import com.bean.Department;
import com.bean.Student;

/**
 * equals()与hashcode()
 * @author yangjianzhou
 * 两个对象 obj1和obj2,如果obj1.equals(obj2)返回true,那么obj1与obj2的hashcode()方法返回值一定相同。
 * 但是如果obj1和obj2的hashcode()方法返回值相同,则obj1.equals(obj2)返回值不一定为true。
 * 如果obj1和obj2的hashcode()不同,那么obj1.equals(obj2)一定返回false
 * 向set里面添加元素时,是根据hashcode和equals来添加的,如果hashcode相同,就判断equals,如果equals相同,就不重复添加
 * 如果quals不同,就添加
 */
public class Test {

	public static void main(String[] args) {
        testEqualsAndHashcode();
        testHashSet();
        testHashCode();
	}
	
	public static void testEqualsAndHashcode()
	{
		
        String s1 = new String("1234");
        String s2 = new String("1234");
        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        Set set = new HashSet();
        set.add(s1);
        set.add(s2);
        System.out.println(set.size());
        System.out.println("========================");
	}
	public static  void testHashSet(){
		HashSet hs = new HashSet();
		Student s1 = new Student(1, "zhangsan");
		Student s2 = new Student(2, "lisi");
		Student s3 = new Student(3, "wangwu");
		Student s4 = new Student(1, "zhangsan");
		hs.add(s1);
		hs.add(s2);
		hs.add(s3);
		hs.add(s4);
		System.out.println(s1.hashCode());
		System.out.println(s4.hashCode());
		Iterator it = hs.iterator();
		System.out.println(hs.size());
		while(it.hasNext()){
			System.out.println(it.next());
		}
		System.out.println("========================");
	}
	
	/**
	 * 这个方法验证了向set里面添加元素的原则为
	 * 1.先验证hashCode
	 * 2.在验证equals
	 * 3.只有通过以上两个验证之后就会将该元素添加到set里面
	 */
	public static void testHashCode(){
		HashSet set = new HashSet();
		Department dept1 = new Department(1, 2);
		Department dept2 = new Department(2, 1);
		set.add(dept1);
		set.add(dept2);
		System.out.println(set.size());
		System.out.println("========================");
	}
}



运行结果:
false
true
1509442
1509442
1
========================
1149414639
1368554401
4
1:zhangsan
2:lisi
1:zhangsan
3:wangwu
========================
2
========================

分享到:
评论

相关推荐

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

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

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

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

    Java中的equals和hashCode方法详解1

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

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

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

    深入理解equals和hashCode方法

    深入理解equals和hashCode方法 equals和hashCode方法是Java中Object类提供的两个重要方法,对以后的学习有很大的帮助。本文将深入剖析这两个方法,帮助读者更好地理解和使用它们。 equals方法 equals方法是用于...

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

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

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

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

    equals与hashCode方法讲解

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

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

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

    学习Object类——为什么要重写equeals和hashcode方法

    Object 类的 equals 和 hashCode 方法的重要性与实现 在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而...

    hashcode和equals方法

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

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

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

    equals,hashcode,toString

    在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...

    Java中equals,hashcode和==的区别

    "Java中equals、hashcode和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...

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

    重写equals()、hashcode()和compareTo()方法是非常重要的,它可以使我们的程序更加高效、可靠和灵活。在实际开发中,我们需要根据具体情况来决定是否需要重写这些方法,并遵守相关的规则,以避免出现意想不到的结果...

    java集合——Java中的equals和hashCode方法详解

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中定义的基本方法,所有类都默认继承自Object类,因此每个Java对象都有这两个方法。这两个方法在处理集合类,尤其是Set接口的实现(如HashSet)时起着...

    equalsverifier:EqualsVerifier可用于Java单元测试中,以验证是否满足equals和hashCode方法的约定

    EqualsVerifier可用于Java单元测试中,以验证是否满足类中equals和hashCode方法的约定。 Maven坐标为: < dependency> < groupId>nl.jqno.equalsverifier</ groupId> < artifactId>equalsverifier</ artifactId> ...

    探索Java中的equals()和hashCode()方法_动力节点Java学院整理

    Java中的equals()和hashCode()方法详解 Java中的equals()和hashCode()方法是两个重要的方法,它们都是从Object类中继承过来的。equals()方法用于比较两个对象的值是否相等,而hashCode()方法用于计算对象的哈希码。...

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

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...

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

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

Global site tag (gtag.js) - Google Analytics