集合ArrayList中的比较函数contains和indexOf

  遍历集合,寻找集合中符合要求的元素。集合类ArrayList中提供了官方的比较方法,

boolean contains(Object o); 和 int indexOf(Object o);

  其两种方法都来源于继承的超级接口 List,而 List 又继承自集合根类接口 Collection,在 ArrayList 类中具体实现。

  两种方法实际作用一样,只是返回值不同。使用方法:

List list = new ArrayList();
ArrayList al = new ArrayList();
list.contains("aa");
list.indexOf("aa");
al.contains("aa");
al.indexOf("aa");

  boolean contains(Object o);

public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

   可以看到上述contains 代码,实际上是调用了 indexOf 方法,如果返回值大于0,则返回true,说明集合中含有该元素,如果返回    值小于0,则返回 false,说明集合中不含有该元素。

  int indexOf(Object o);//具体实现方法

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;
    }

  可以看到,indexOf 有对元素进行null 值和非null的两种判断,然后进行 == 与 equals方法的判断,如果存在返回该元素在集合    中的索引,否则返回-1,而contains 方法再根据其判断。

  此方法存在于API中,可以直接使用,也可自己书写。

  PS:对象元素的判断,如果集合中存储的是对象元素,要使用equals方法进行判断时,需要在对象的定义类中,对 equals 方      法进行重写,自定义判断标准。由于 equals 是根类Object的方法,所以对其重写之后,集合判断传入对象时,由于JAVA中多      态的缘故,父类引用会调用子类方法,所使用的就是对象重写过的equals方法进行判断

  PS的PS:简而言之,对象间的相等判断,需要自行在类中重写equals方法,或者自定义方法来判断。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值