java中indexOf性能怎么样_[Java] indexOf使用等于吗?

博客讨论了在Java中,当自定义类覆盖equals方法后,ArrayList的indexOf方法可能不按预期工作的情况。问题在于,当传入的参数类型与列表中的元素类型不同时,equals方法不会被调用。解决方案是确保在equals方法中正确处理不同类型的对象比较,并在查找时使用相同类型的对象调用indexOf。
摘要由CSDN通过智能技术生成

我想知道如何实现ArrayList的方法indexOf.实际上我已经覆盖了equals方法,如下所示:

public class CustomObject {

@Override

public boolean equals(Object o) {

if(o instanceof CityLoader)

return ((CityLoader)o).getName() == this.name;

else if (o instanceof String)

return this.name.equals((String)o);

return false;

}

}

我虽然这会避免我覆盖indexOf方法,但似乎我完全错了.

当我尝试

ArrayList customObjects = new ArrayList

... insert customobject into the arraylist ...

customObjects.indexOf(new String("name"))

indexOf返回false但它应该返回true. (我检查了我要找的元素存在)

我完全错了吗?

解决方法:

当比较的对象不是同一类型时,equals永远不会返回true(在你的情况下,当o不是CustomObject的实例时,CustomObject的equals应该总是返回false).

当你向它传递一个String时,indexOf的实现恰好使用String的equals而不是你的CustomObject的equals,而当你传递一个不是String的对象时,String的equals返回false.

另外,在比较字符串时不要使用==.

您应该将CustomObject的实例传递给indexOf:

customObjects.indexOf(new CustomObject("name"))

(或者任何CustomObject的构造函数看起来像)

你的equals方法应如下所示:

public boolean equals(Object o) {

if(!(o instanceof CityLoader))

return false;

CityLoader other = (CityLoader)o;

return other.name.equals(this.name);

}

标签:indexof,java,equals,override

来源: https://codeday.me/bug/20190824/1704556.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值