java中怎么比较两个自定义实体对象是否相等(比如在Set数据结构中去重)

这篇具有很好参考价值的文章主要介绍了java中怎么比较两个自定义实体对象是否相等(比如在Set数据结构中去重)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

有一个类Person,需要判断Account类的对象account1,account2是否相等。
判断规则为,当id(int类型判断是否带下相等)和department(判断字符串内容是否相等)属性均相等时(默认两个属性都必须非空,若有属性为空则认为两个对象不等),则认为该Account类对象相等。

public class Account{
	private int id;
	private String department;
}
Account account1 = new Account(1,"用户处");
Account account2 = new Account(1,"用户处");

以下开始介绍如何判断自定义类是否按照指定规则相等。

前提介绍

Java中所有类都继承自Object类,该类拥有equals方法,对象之间比较大小都是默认调用equals方法(可能会重写该方法),比如最常见的Integer或者String类对象,之间比较大小都是默认重写并调用了该方法。
下面的String,Integer源码解析,引用大佬文章,
Java Set对象去重
java.lang.Integer.equals():两个对象对应的值一致则返回true。

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

java.lang.String.equals():两个字符串对应的值一致则返回true:

public boolean equals(Object anObject) {
    if (this == anObject) {//同一个对象,必定是一致的
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {//对比每一个字符
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;//anObject不是String实例,那么返回false
}

而如果不重写该方法,默认调用的是java.lang.Object.equals()方法:两个对象的引用是否一致,即两个的对象是否是同一个。

public boolean equals(Object obj) {
    return (this == obj);
}

但是我要比较自定义的值是否相等,并不希望是比较两者之间的引用是否相等,而是需要当判定他们的全部属性相等时则认为他们相等。

对于自定义对象进行比较

所以根据上面的先验知识,知道要对于自定义对象按照自定义规则比较是否相等,肯定得重写equals方法。
如下:

@Override
public boolean equals(Object object){
	if(object == null){
		return false;
	}
	if(object == this){
		return true;
	}
	if(object instanceof Account){
		Account account = (Account) object;
		try{
				if(account.id == this.id && account.department.equals(this.department)){
					return true;
				}
			}
		catch(Exception e){
			//对象的属性不全,则返回false
			return false;
		}
	}
	return false;
}

HashSet判断两个元素相等的标准是两个对象通过hashCode()方法返回的值相等并且两对象通过equals()方法比较相等,所以如果将对象输入在HashSet中,光是实现equals方法还是无法实现去重的效果,必须还得同时重写hashCode方法。
因为在HashSet插入新元素流程中,先根据hashCode方法获得对象的hashCode值,然后通过hashCode值计算得到hash值决定该对象在HashSet中的存储位置。
然后再通过equals比较,如果equals返回值为false,那两个元素还是不会被认定为同一元素,hashSet会在这个位置用链式结构保存新加入的元素。
hashCode方法如下:

@Override
public int hashCode(){
	try{
		return id.hashCode() + department.hashCode();
	}catch(Exception e){
		Random random = new Random();
		return random.nextInt(100);
	}
}

总结

如果想要实现自定义对象在HashSet实现自定义规则去重,需要重写自定义对象的hashCode和equals方法。文章来源地址https://www.toymoban.com/news/detail-564845.html

到了这里,关于java中怎么比较两个自定义实体对象是否相等(比如在Set数据结构中去重)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python字符串比较:如何判断两个字符串是否相等?

    Python字符串比较:如何判断两个字符串是否相等? 在Python编程中,字符串是最常用的数据类型之一。当我们需要比较两个字符串时,通常需要判断它们是否相等。这篇文章将详细介绍Python中比较两个字符串的方法。 使用“==”运算符比较字符串 在Python中,可以使用“==”运算

    2023年04月11日
    浏览(45)
  • Go语言如何判断两个对象是否相等

    在编程中,判断两个对象是否相等是一项常见的任务,同时判断对象是否相等在很多情况下都非常重要,例如: 单元测试 :编写单元测试时,经常需要验证函数的输出是否符合预期,这涉及到比较对象是否相等。 数据结构操作 :在使用 map 等数据结构时,可能需要判断两个对

    2024年02月07日
    浏览(53)
  • 在JS中如何判断两个对象是否相等

    在JavaScript中,判断两个对象是否相等有多种方法,取决于你对 相等 的定义以及对象属性的类型。以下是几种常见的方法:   1. 严格相等运算符 (===) 使用 === 运算符可以比较两个对象是否引用同一个对象。如果两个变量引用了同一个对象,则它们是相等的,否则它们是不相等

    2024年02月03日
    浏览(37)
  • 浅谈java自定义中类两个对象的比较

    目录 实现比较两个对象是否相同 1.前置代码 1.学生类 2.示例  3.输出  4.原因 2.那么我们要怎么做呢? 1.对Student类中重新实现quals方法(即对equals方法重写)  2.完整代码如下: 3.具体操作 4.演示 1.示例 2.输出 3.原因  实现比较两个对象的大小  第一种: 用接口的方式实现,实现一个

    2024年02月09日
    浏览(30)
  • Java中比较Long类型是否相等

    Java中,比较Long类型是否相等,可以使用“==”和“equals()”方法。 在Java中,\\\"==\\\"用于比较两个基本数据类型或两个引用数据类型是否指向同一对象。对于Long类型的封装类,由于它们的值在-128到127之间时会被缓存,因此这些值相同的Long型对象会指向同一个对象,使用\\\"==\\\"比较会

    2024年02月05日
    浏览(31)
  • 【python基础知识】python中怎么判断两个字符串是否相等

    目录 有哪些判断方法 1. == 运算符 2. is 运算符 有哪些特殊情况 1. 字符串中包含空格、换行符、制表符等特殊字符 2. 字符串编码格式的不同 3. 字符串对象的创建方式不同 注意事项 1. 避免使用is运算符进行字符串比较 2. 注意空格、换行符、制表符等特殊字符的影响 3. 注意字符

    2024年02月08日
    浏览(57)
  • java中比较两字符串是否相等

    字符串比较的三种方式:==,equals,Objects.equals  打印结果 a==b为false 因为两个字符串的索引值不同。 打印结果为  a.equals(b)为true 因为两个字符串的值相同。 所以在java中进行字符串比较时,经常使用equals比较两字符是否相同。一个固定的字符串和字符串数组(或list集合)进行

    2023年04月08日
    浏览(30)
  • java 判断两个List是否包含 判断两个list相等

    java 判断两个List是否包含 判断两个list相等 https://blog.51cto.com/u_12855/7333853 1、直接使用equals()比较 众所周知,两个列表具有完全相同的元素并且具有完全相同的顺序时,它们是相等的。因此, 如果我们业务要求两个list顺序一致,可以使用equals()方法进行相等性检查: 即使

    2024年02月04日
    浏览(41)
  • java判断字符串是否和空字符串(““)相等、是否和空引用(null)相等,比较顺序不同导致出现死代码(Dead code)

    我在用Java实现需求的时候,用到了字符串跟空字符串(“”)比较,跟空引用null比较,两个比较语句的顺序不同,一个顺序出现了死代码(Dead code)。 下面这个代码片段,字符串line跟空字符串(“”)的比较放在跟null的比较前面,编译器提醒红色方框中的代码是死代码:

    2024年02月14日
    浏览(51)
  • 判断两个数组是否相等

    在判断两个数组是否相等之前,我们应该弄清楚数组怎样才算相等,官方给的解释是这样的: Returns true if the two specified arrays of ints are equal to one another. Two arrays are considered equal if both arrays contain the same number of elements, and all corresponding pairs of elements in the two arrays are equal. In other

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包