List的contains方法

昨天遇到一个List<String>对象去重字符串的问题,网上查了下看到一个方法,就是在将字符串对象放入集合前进行contains方法过滤。即如果集合中不存在该元素就放入元素,否则不做任何操作,看了下评论大家都谈到了效率问题:contains方法到底会不会遍历集合?又去网上查了查,是这样的: list.contains(o),系统会对list中的每个元素e调用o.equals(e),方法,加入list中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,那么list.contains(o)返回true,否则返回false。

也就是说contains会遍历集合内所有元素。

<span style="white-space:pre">	</span>看看ArrayList的contains源码:
<pre name="code" class="java">    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

    /**
     * Returns the index of the first occurrence of the specified element
     * in this list, or -1 if this list does not contain the element.
     * More formally, returns the lowest index <tt>i</tt> such that
     * <tt>(o==null ? get(i)==null : o.equals(get(i)))</tt>,
     * or -1 if there is no such index.
     */
    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;
    }


 contains方法在执行后首先会调用indexOf()方法。indexOf()方法会判断传入的对象是否为空,如果为空,则遍历整个集合的元素,如果集合的某个元素为空,返回该元素的下标。如果传入对象不为空, 
则遍历整个集合的元素,如果该元素和集合内某个元素的equals比较结构为true,返回该元素下标。可以看到如果遍历完集合后没有元素存在于集合中就返回-1。最后contains还做了判断,如果indexOf()方法返回大于0,就说明集合内存在该元素,小于0则不存在。。关键是了解查找一个元素在集合中和他相同元素的下标,是要遍历整个集合的,这个问题里体现了效率的概念! 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Java中的List.contains()方法用于检查列表中是否包含指定元素。如果包含,则返回true,否则返回false。该方法的语法如下: boolean contains(Object o) 其中,参数o是要检查的元素。如果o是列表中的元素,则返回true,否则返回false。该方法的时间复杂度为O(n),其中n是列表的大小。 ### 回答2: Java中的List是一种有序的集合类,它可以存储多个元素,并且可以根据索引访问每一个元素。contains方法List类的一个成员方法,用于判断一个List中是否包含指定的元素。下面是有关Java List contains方法的详细说明: 1. contains方法的语法 contains方法的语法如下: public boolean contains(Object o) 其中,参数o表示要查找的元素。 2. contains方法的返回值 contains方法的返回值为布尔类型,如果List中包含参数o所表示的元素,则返回true;否则返回false。 3. contains方法的实现原理 在Java中,List是一种基于数组或链表实现的数据结构,因此contains方法的实现原理也与具体的List实现方式有关。对于基于数组实现的Listcontains方法可以通过线性搜索的方式遍历数组来实现。具体来说,它遍历List中的每一个元素,逐个与参数o进行比较,直到找到一个与之相等的元素或者遍历完整个List。对于基于链表实现的Listcontains方法可以通过遍历链表的方式实现。具体来说,它从链表的头部开始遍历,逐个与参数o进行比较,直到找到一个与之相等的元素或者遍历完整个链表。 4. contains方法的使用示例 下面是一个使用contains方法的示例: List<String> list = new ArrayList<String>(); list.add("apple"); list.add("banana"); list.add("orange"); boolean result1 = list.contains("apple"); // 返回true boolean result2 = list.contains("grape"); // 返回false 在这个示例中,我们创建了一个包含三个字符串的List,并使用contains方法判断List中是否包含了"apple"和"grape"这两个元素。由于List中包含"apple",因此result1的值为true;而由于List中不含"grape",因此result2的值为false。 综上所述,Java List contains方法是用于判断一个List中是否包含指定元素的方法,它的实现原理与具体的List实现方式有关,使用时只需传入要查找的元素即可。 ### 回答3: Java中的List是一种基础的数据结构,它允许我们在一个可变长度的数组中存储一组元素,并提供了很多可用的方法来对这些元素进行操作。其中contains方法就是其中之一。 contains方法List接口中定义的一个方法,其作用是用于判断当前列表是否包含指定的元素。它的参数是要查找的元素,返回值是一个布尔值,如果当前列表包含指定的元素,则返回true,否则返回false。 contains方法的使用非常简单,我们可以通过以下代码来实现: List<String> strings = new ArrayList<>(); strings.add("one"); strings.add("two"); strings.add("three"); if (strings.contains("two")) { System.out.println("List contains 'two'"); } else { System.out.println("List does not contain 'two'"); } 上述代码首先创建了一个List<String>实例,并向其中添加了三个元素:one、two、three。接着使用contains方法来检查当前列表是否包含 "two" 元素,然后输出检查结果。 需要注意的是,contains方法比较两个元素是否相等时,是调用元素的equals方法进行比较的。因此,如果我们需要比较自定义类型的对象时,需要在自定义类中实现equals方法,并保证该方法按照自定义规则来比较对象之间的相等性。 此外,在使用contains方法时,我们需要注意它的时间复杂度。对于ArrayList这样的顺序列表,contains方法的时间复杂度是O(n),即平均需要遍历列表的一半来判断元素是否存在;而对于LinkedList这样的链表,contains方法的时间复杂度是O(n),即平均需要遍历整个链表来判断元素是否存在。因此,在处理大规模数据时,我们应该尽量避免使用contains方法,以减少其时间复杂度对程序性能的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值