[英]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;
}
}
}
谢谢
就在这里。
如果object
为null
,则object.equals(element)
将抛出NullPointerException
因此, object
为null
的情况将在单独的循环中处理。
输入参数可以为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
。
这是在单独的分支中处理的,因为当object
为null
,任何对其上调用方法的尝试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.