Java中List的contains方法,你用对了吗?

x33g5p2x  于2022-01-11 转载在 Java  
字(0.7k)|赞(0)|评价(0)|浏览(205)

Java语言中的List是我们处理集合时经常会用到的。而List定义了一个contains方法,用以判断一个集合中是否包含指定的一个对象。

大家应该有用到过吧,可是你真的会用,用对了吗?

看看下面的代码。

上图代码中,创建了两个内容相同的String对象:str1和str2,将str1存入了集合list中,。这两个对象不是同一个对象,所以“str1==str2”输出的结果是false。但是通过“list.contains(str2)”判断集合中是否包含str2时,返回的却是true。

是你意料中的吗?

再看看下面的代码。

是把上面的代码中的String换成了一个自定义的类Coder。那执行的结果和第一段代码的执行结果会是一样的吗?

见证一下。

恩?“list.contains(coder2)”返回的结果是false。为什么和集合存放String时不一样了呢。

一起来看看contains方法的源码吧(以ArrayList的实现为例)。

大家注意到了吧,其实contains方法中是使用了equals方法逐一与集合中的元素进行比较来判断集合是否包含指定对象的。

刚才存放自定义类Coder的集合示例代码中使用contains返回false,是因为自定义类Coder没有重写Object的equals方法,而Object的equals只有两个对象是同一个对象才会返回true。

而存放String的集合示例代码中使用contains返回true,是因为String类中重写了Object的equals方法,只要是两个String对象的内容是相同的,就会返回true。

现在是不是清楚了。

相关文章