equals判断是否相同
contains判断某个对象是否含有这个元素
都是判断的那contains不可以直接用equals直接判断吗?
  谁能给我说下他们具体的用法啊???
     

解决方案 »

  1.   

    可以是可以,但是当有对象提供contains 时,你会去用equals 吗?
    例如,一个AarryList 有1000个String元素,现在需要你判断里面是否有我的String id:lzw0286,
    你难道不用contains ,而会自己去写个一方法,来迭代arrayList,取出一个一个String来equals吗?其实这2个方法主要看使用的情形,看样子楼主还不是很理解这2者的区别。
      

  2.   

    从语义上看就有很大区别啊,就更别说实现上了
    equals是比较两个东西是否等同,这个适用于任何类别的对象
    contains是是否包含的意思,那肯定.左边的对象是一个容器了
    String现在也有一个contains,那是因为String是一个字符的容器
      

  3.   

    那contains他是怎么实现的呢?  他比较的的他们的hashcode?? 那如果equals和contains同是从那1000个元素里判断的话 那个会快呢???  那他是怎么样实现的呢???
      

  4.   

    请参考我在4楼的回复,程序很多时候需要从语义上去理解
    contains内部如何实现要看具体是哪种容器,ArrayList这种随机访问容器内部就是用equals去比较的,和你常识中的实现应该是一样的,HashSet这类容器就是用hashcode来比较的了
    下面我粘一段ArrayList的代码吧
        public boolean contains(Object o) {
    return indexOf(o) >= 0;
        }
        public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
    if (elementData[i]==null)
        return i;
    } else {
        for (int i = 0; i < size; i++)
    if (o.equals(elementData[i]))
        return i;
    }
    return -1;
        }
      

  5.   

    hashcode 又与查找对象的存储空间有关系了。
    首先,hashcode是一种查找对象的算法,当比较2个对象是否相等时,先会到hashcode对应的内存空间里去找,如果2个对象是在同一个内存空间,再去比较2个对象的equals方法。
    至于性能,这个就没有研究过了。感觉有点扯远了。楼主记住以下2点就可以了。
    当比较对象A与对象B是否相等时要调用 equal方法
    当判断对象A是否在集合里时使用contains.在使用contains的地方你可以不使用,而自己用equal一个一个比较
    但是当使用equal的地方,你是无法使用contains替代的。
      

  6.   

    看7楼的源码就知道,其实是一样的,contains也是循环遍历
      

  7.   

    楼主有时间多看看jdk源码,里面的很多算法、用法很值得研究的
      

  8.   

    研究一下JDK源码,就很快得到答案了
      

  9.   

    每个方法必然有它的用处.每个方法都是开发者去设计实现的.你去考虑一下它为什么要给你提供这个方法?就像你自己写开发写Dao层一样.意思不都一样么?
      

  10.   

    equals只能判断两个变量的值是否相等。
    contains常用与集合中判断某个对象是否含有这个元素
      

  11.   

    看看源码,应当了解更清楚点·
    equals是判断2对象是否相等
    而contains是判断某个对象是否在一个容器里面,是包含的关系·
      

  12.   

    equals是判断两个对象的内容是否一样
    contains容器里面判断某个对象是否含有这个元素
    包含和相等时不一样的!!
      

  13.   

    equals 是从头比到尾,只有全部相同 才返回true 而contains只要里面有相同的就返回true