Является ли пустой Arraylist (с нулями как его элементы) считаться нулевым? Итак, по существу было бы верно следующее утверждение:
if (arrayList != null)
спасибо
Является ли пустой Arraylist (с нулями как его элементы) считаться нулевым? Итак, по существу было бы верно следующее утверждение:
if (arrayList != null)
спасибо
Нет.
ArrayList может быть пустым (или с нулями как элементы), а не null. Это считалось бы пустым. Вы можете проверить, нет ли пустого ArrayList с:
ArrayList arrList = new ArrayList();
if(arrList.isEmpty())
{
// Do something with the empty list here.
}
Или, если вы хотите создать метод, который проверяет наличие ArrayList только с нулями:
public static Boolean ContainsAllNulls(ArrayList arrList)
{
if(arrList != null)
{
for(object a : arrList)
if(a != null) return false;
}
return true;
}
arrayList == null
, если нет экземпляра класса ArrayList
, назначенного переменной ArrayList
(обратите внимание на upercase для классов и нижний регистр для переменных).
Если в любое время вы выполняете arrayList = new ArrayList()
, затем arrayList != null
, потому что указывается на экземпляр класса ArrayList
Если вы хотите знать, пуст ли список, сделайте
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.
}
}
Последние два подхода - это более объектно-ориентированные, более элегантные и многоразовые решения.
Обновлено с предложением Джеффа IAE вместо NPE.
Нет, это не сработает. Лучшее, что вы сможете сделать, это перебрать все значения и проверить их сами:
boolean empty = true;
for (Object item : arrayList) {
if (item != null) {
empty = false;
break;
}
}
Точно так же, как ноль - это число - просто число, которое не представляет - пустой список по-прежнему является списком, просто списком, в котором ничего нет. null
нет списка вообще; поэтому он отличается от пустого списка.
Аналогично, список, содержащий нулевые элементы, является списком и не является пустым списком. Потому что в нем есть элементы; не имеет значения, что эти предметы сами являются нулевыми. Например, список с тремя нулевыми значениями в нем и ничем другим: какова его длина? Его длина равна 3. Длина пустого списка равна нулю. И, конечно, null не имеет длины.
Нет, поскольку он содержит элементы, должен быть экземпляр этого. Его элементы, являющиеся нулевыми, не имеют значения, поэтому statment ((arrayList)!= Null) == true
Прежде всего, вы можете проверить это самостоятельно, написав простой TestCase!
пустой Arraylist (с нулями в качестве элементов)
Во-вторых, если ArrayList является EMPTY, это означает, что он действительно пуст, он не может иметь NULL или NON-NULL как элемент.
В-третьих,
List list = new ArrayList();
list.add(null);
System.out.println(list == null)
будет печатать false.
Если вы хотите проверить, содержит ли массив элементы с нулевыми значениями, используйте это:
private boolean isListOfNulls(ArrayList<String> stringList){
for (String s: stringList)
if( s != null) return false;
return true;
}
Вы можете заменить <String>
на соответствующий тип для ArrayList