Java中容器的contains函数与自定义类

博客讲述了在Java编程中,当使用自定义类的容器并调用contains方法时,需要正确重写equals方法。在解决MIT实验作业中遇到的问题时,发现contains方法未正确调用自定义的equals。通过添加@Override注解并修改equals方法的参数为Object类,然后在函数内部进行类型转换,最终解决了问题,使得contains和indexOf方法能够正常工作,简化了遍历代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一句话博客
自定义类的容器的contains函数需要重载equals函数,格式需要@Override和equals的参数列表中应该是Object类的。

具体分析过程

在完成mit实验作业的时候,add函数需要遍历list 找寻相同的对象。
对Vertex类的equals函数定义如下:

// methods
    public boolean equals(Vertex that) {
        return vertexName.equals(that.vertexName);
    }

在添加add函数的时候,需要,判断是否已经存在。
然而在调用contains函数的时候,Junit检测add函数出错。最后确定是contains函数判断的问题。
然后放弃contains,遍历整个list,进行逐个的equals的检查,才通过了测试。
埋下了这个坑,所以写这个博客为了填坑。。。

关于Collections的contains函数的spec

可以清楚的看到,他调用了equals函数,而我们之前写的equals函数本身是正确的,(如上)但并没有被contains调用。
所以应当是override没有完成,添加了@Override函数之后,编译错误,只提示需要移除annotation就是@Override。
一阵百度之后,看到一个在参数中,将类型变为Object类,然后在函数体内强制类型转换进行处理。

然后contains函数终于好使了!相同的indexOf函数也好使了,赶紧回去修改所有的遍历。。代码变得更精简!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值