黑马程序员技术交流社区

标题: 集合里的contains是如何运行的? [打印本页]

作者: 陈云阳    时间: 2014-6-28 01:48
标题: 集合里的contains是如何运行的?
本帖最后由 陈云阳 于 2014-6-28 13:51 编辑

newAl.contains(obj);

newAL为空,
Obj不为空,

那么调用contains到底有没有调用equals(e)方法


  1. contains

  2. public boolean contains(Object o)
  3. 如果此列表中包含指定的元素,则返回 true。更确切地讲,当且仅当此列表包含至少一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,则返回 true。
  4. 指定者:
  5. 接口 Collection<E> 中的 contains
  6. 指定者:
  7. 接口 List<E> 中的 contains
  8. 覆盖:
  9. 类 AbstractCollection<E> 中的 contains
  10. 参数:
  11. o - 测试此列表中是否存在的元素
  12. 返回:
  13. 如果此列表包含特定的元素,则返回 true
复制代码


这是contains的说明文档,(o==null ? e==null : o.equals(e))  这里o就是obj的引用,o不为空,应该就会调用equals才对,为什么运行时却没调用equals方法,有没谁知道contains完整的实现方 法


作者: 陈云阳    时间: 2014-6-28 13:58
{:2_32:}有没人来帮忙解决
作者: 菜小徐    时间: 2014-6-28 14:50
equals的底层还是用==的,关键是比较的对象
作者: 龙泉长空    时间: 2014-6-28 15:03
看到集合这就迷糊了...
作者: 陈云阳    时间: 2014-6-28 15:31
菜小徐 发表于 2014-6-28 14:50
equals的底层还是用==的,关键是比较的对象

这里面不太明白的就是   当集合里只有一个元素时,编译运行后,调用contains,contains运行时没有调用
equals方法,但是按照API说明文档里面的三木运算来执行的话,集合只有一个元素的情况equals应该是会被执行才对啊,所以想知道contains底层到底是怎么运行的,有点纳闷
作者: 陈云阳    时间: 2014-6-28 15:32
龙泉长空 发表于 2014-6-28 15:03
看到集合这就迷糊了...

其实如果有学过数据结构的,学集合就会容易些,集合底层就是数据结构




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2