java使用迭代器从包含null的列表中删除元素
List<Integer> list = new ArrayList<>();
list.add(12);
list.add(null);
list.add(22);
list.add(32);
System.out.println(list);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer a = iterator.next();
System.out.print(a+" ");
if(a.equals(32)){
iterator.remove();
}
}
O/p
[12, null, 22, 32]
12 null Exception in thread "main" java.lang.NullPointerException
at javed.collection.Collecting.main(Collecting.java:57)
尝试从包含null的列表中删除任何元素都会导致NullPointerException。 但可以很容易地从不包含null的列表中删除元素。 我比较整数和空值是不是做错了
如果我们不能从包含null的列表中删除元素,那么为什么他们允许我们在列表中添加null,这有什么用呢
# 1 楼答案
如果对
null
变量调用任何方法,就会得到一个NullPointerException
。这意味着如果a
是null
,并且您尝试调用a.equals(32)
,它将NPE只需输入以下内容,即可对变量进行空检查:
另一方面,您不必手动迭代列表以从中删除特定元素。有一种方法可以帮你做到这一点:
# 2 楼答案
此行将从列表中删除所有空值
# 3 楼答案
你可以这样做:
但这并不是一个好习惯,因为
a
的隐含框/debox最快的方法是:
# 4 楼答案
你绝对可以从一个包含空引用的列表中删除-你不能对空引用调用
equals
。问题在于:如果
a
是null
,那么NullPointerException
将失败。关于这一点,没有具体的清单。在看不到列表或迭代器的情况下,您可以获得完全相同的行为:最简单的修复方法是检查空值:
(现在的比较是使用拆箱,而不是在每次迭代中装箱32次——这仍然很便宜,但在我看来不那么可读。)
或者以一个装箱的
Integer
值开头:# 5 楼答案
您应该添加一个空检查:
您还可以使用^{} 为您执行空检查:
# 6 楼答案
将条件语句更改为:
致:
避免可能的空引用