空数组列表等于空

2022-09-01 06:23:04

空数组列表(以 null 作为其项)是否被视为 null?因此,基本上以下陈述是正确的:

if (arrayList != null) 

谢谢


答案 1

不。

ArrayList 可以是空的(或将 null 作为项),也可以不是 null。它将被视为空的。您可以使用以下命令检查 am empty ArrayList:

ArrayList arrList = new ArrayList();
if(arrList.isEmpty())
{
    // Do something with the empty list here.
}

或者,如果要创建一个检查仅包含 null 的 ArrayList 的方法:

public static Boolean ContainsAllNulls(ArrayList arrList)
{
    if(arrList != null)
    {
        for(object a : arrList)
            if(a != null) return false;
    }

    return true;
}

答案 2

arrayList == null如果没有分配给变量的类的实例(请注意类的上写字母和变量的小写字母)。ArrayListarrayList

如果在任何时候,你这样做,那么因为 指向类的实例arrayList = new ArrayList()arrayList != nullArrayList

如果您想知道列表是否为空,请执行

if(arrayList != null && !arrayList.isEmpty()) {
 //has items here. The fact that has items does not mean that the items are != null. 
 //You have to check the nullity for every item

}
else {
// either there is no instance of ArrayList in arrayList or the list is empty.
}

如果你不希望列表中有空项,我建议你用自己的类扩展 ArrayList 类,例如:

public class NotNullArrayList extends ArrayList{

@Override
public boolean add(Object o) 
   { if(o==null) throw new IllegalArgumentException("Cannot add null items to the list");
      else return super.add(o);
    }
}

或者,您可以扩展它,以便在您自己的类中具有一个方法,该方法重新定义了“空列表”的概念。

public class NullIsEmptyArrayList extends ArrayList{

@Override
public boolean isEmpty() 
   if(super.isEmpty()) return true;
   else{
   //Iterate through the items to see if all of them are null. 
   //You can use any of the algorithms in the other responses. Return true if all are null, false otherwise. 
   //You can short-circuit to return false when you find the first item not null, so it will improve performance.
  }
}

最后两种方法是更面向对象,更优雅和可重用的解决方案。

使用 Jeff 建议 IAE 而不是 NPE 进行了更新