首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

即使被重写的equals()方法返回True,Java contains()方法也会返回False

Java中的contains()方法用于检查集合中是否包含指定的元素。它使用equals()方法来比较元素是否相等。即使被重写的equals()方法返回True,contains()方法也会返回False的原因是因为contains()方法在比较元素时,不仅仅使用equals()方法,还会使用hashCode()方法来判断元素的哈希值是否相等。

在Java中,equals()方法和hashCode()方法是成对出现的。当我们重写equals()方法时,通常也需要重写hashCode()方法,以保证相等的对象具有相等的哈希值。如果两个对象的哈希值不相等,contains()方法会认为它们不相等,即使equals()方法返回True。

这是因为Java集合框架中的一些数据结构,如HashSet和HashMap,使用哈希表来存储元素。哈希表根据元素的哈希值来确定存储位置,当我们调用contains()方法时,它会首先根据元素的哈希值来确定存储位置,然后再使用equals()方法来比较元素是否相等。如果两个元素的哈希值不相等,contains()方法会直接返回False,而不会调用equals()方法。

因此,如果我们重写了equals()方法但没有重写hashCode()方法,那么contains()方法会根据默认的hashCode()方法来判断元素的哈希值,这可能导致contains()方法返回False,即使equals()方法返回True。

综上所述,为了正确使用contains()方法,我们应该始终重写equals()方法和hashCode()方法,并确保它们的实现是一致的。这样可以保证当equals()方法返回True时,contains()方法也会返回True。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JAVA中重写equals()方法为什么要重写hashcode()方法说明

    重写hashCode()时最重要的原因就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值。如果在将一个对象用put()方法添加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个 hashCode()值,那么就无法重新取得该对象了。所以,如果你的hashCode()方法依赖于对象中易变的数据,那用户就要小心了,因为此数据发生变化时,hashCode()就会产生一个不同的hash码,相当于产生了一个不同的“键”。        Object的hashCode()方法,返回的是当前对象的内存地址。下次如果我们需要取一个一样的“键”对应的键值对的时候,我们就无法得到一样的hashCode值了。因为我们后来创建的“键”对象已经不是存入HashMap中的那个内存地址的对象了。        我们看一个简单的例子,就能更加清楚的理解上面的意思。假定我们写了一个类:Person (人),我们判断一个对象“人”是否指向同一个人,只要知道这个人的身份证号一直就可以了。        先来个没有重写Code类的hashcode()的例子吧,看看是什么效果:

    01

    equals方法的理解

    通常在面试中会被问到equals方法和==的区别,以及有没有重写过equals方法,以及重写equals方法的约定是什么? 下面简单的介绍一下我的理解: 首先,在比较基本类型中==和equals方法没有任何区别。 但是在比较引用类型,如对象中 equals 是通常是比较的是对象的实例是否相同。 ==通常是比较的是对象的实例的地址是否相同即对象实例的id。这是两个最重要的区别。 其次,重写equals方法的原则或者说约定是什么,以及什么时候应该覆盖equals呢 如果类具有自己特有的“逻辑相等”概念(不等同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这个时候我们要覆盖equals方法(通常属于值类的情况)。—来自于effective Java 中文版 但是在覆盖equals方法的时候要遵守的约定如下: equals方法实现了等价的关系 1.自反性。对于任何非null的引用值x,x.equals(x)都必须返回true 2.对称性。对于任何非null的引用值x和y,当且仅当x.equals(y)返回true的时候,y.equals(x)也必须返回true 3.传递性。对于任何非null的引用值x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)也必须返回true。 4.一致性。对应任何非null的引用值x,y,只要equals比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致性的返回true或者一致性的返回false。—–来自于effective Java 中文版

    04

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券