繁体   English   中英

Java ArrayList包含方法

[英]Java ArrayList contains method

@Override
        public boolean contains(Object object) {
            if (object != null) {
                for (E element : a) {
                    if (object.equals(element)) {
                        return true;
                    }
                }
            } else {
                for (E element : a) {
                    if (element == null) {
                        return true;
                    }
                }
            }
            return false;
        }

我正在学习Java,并且正在研究源代码,以了解如何编写某些方法。 我想问为什么要写

else {
        for (E element : a) {
            if (element == null) {
                return true;
            }
         }
    }

谢谢

就在这里。

如果objectnull ,则object.equals(element)将抛出NullPointerException

因此, objectnull的情况将在单独的循环中处理。

输入参数可以为null或不为null 如果为null则需要遍历所有列表元素,如果数组中为null ,则返回true 而且我们必须使用==运算符,因为equals将抛出NullPointerException

在这种情况下,您的contains()方法实现为检查对象值是否为null ,如果为null ,则return true否则return true false 实现此方法使您有机会检查任何object (将对象作为参数传递)值(使用if条件或任何其他条件)。 稍后,当您要检查值是否存在时,可以对对象进行操作。

在ArrayList contains()

如果此列表包含指定的元素,则ArrayList.contains(Object)方法返回true

ArrayList<Integer> listObj = new ArrayList<Integer>();
listObj.add(1);
listObj.add(2);

System.out.println("Contains : "+listObj.contains(1));

此方法对检查元素更为重要,如果为true则应做一些工作。 举例来说

if(listObj.contains(2)){
  int index=arrlist.indexOf(2);
  listObj.remove(index);
}

这里发生的是因为参数不是空值,所以传递了值(对象),

public boolean contains(Object object) {
    if (object != null) {

然后遍历ArrayList元素,

for (E element : a) {

等于通过值,

if (object.equals(element)) {

返回真

否则(如果object为null )使用else块。

抛出

ClassCastException如果指定元素的类型与此列表不兼容。

NullPointerException如果指定的元素为null,并且此列表不允许使用null元素。

阅读更多


假设object是一个String

这也是String类中的contains()方法。 场景略有不同,但概念相同。

当您希望检查一个String包含特定的子字符串时。

String word= "Hey there how are you";
if(word.contains("you")){
    System.out.println("I am fine!");
}

我想问为什么要写

 else { 

[...]

因为否则, if不满足if语句( object != null )的条件,但是该方法与合同/文档不一致,则该方法将始终返回false 许多Java List实现都可以将null作为元素contains(null) ,而当这样做时, contains(null)必须为其返回true

这是在单独的分支中处理的,因为当objectnull ,任何对其上调用方法的尝试equals()例如equals()都将引发NullPointerException 因此, if块中的方法无法在这种情况下应用。

List是一个集合,它允许将空引用的对象插入其中。

该算法的意思是告诉您,如果列表中至少包含null,并且稍后再询问/搜索一个null对象,则它将在第一个匹配项时返回true

因为.equals()比较方法无法在null上调用,并且如果您要调用null.equals(SOMETHING); 将抛出NullPointerException 因此,这里采用了古老的传统方法! 使用==比较运算符。

Collections Framework接口中的许多方法都是根据equals方法定义的。 例如,contains(Object o)方法的规范说:“当且仅当此集合包含至少一个元素e使得(o == null?e == null:o.equals(e))时,返回true。 ”。 此规范不应解释为暗示使用非空参数o调用Collection.contains会导致对任何元素e调用o.equals(e)。 实现的自由是实现优化的方法,从而可以例如通过首先比较两个元素的哈希码来避免等值调用。 (Object.hashCode()规范保证了具有不相等哈希码的两个对象不能相等。)更一般而言,各种Collections Framework接口的实现都可以自由地利用实现者认为合适的基础Object方法的指定行为。 。

请参阅: https : //docs.oracle.com/javase/7/docs/api/java/util/Collection.html

有必要编写else { ...因为只有当arg'object'不为null时,if条件才成立。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM