web-dev-qa-db-ja.com

空のArrayListはnullに等しい

空のArraylist(アイテムとしてnullを含む)はnullと見なされますか?したがって、基本的には以下のステートメントは真になります。

if (arrayList != null) 

ありがとう

30
Global Dictator

いや.

ArrayListは空(または項目としてnullを含む)にすることも、null以外にすることもできます。空と見なされます。空の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;
}
69
Justin Niessner

_arrayList == null_変数ArrayListに割り当てられたクラスarrayListのインスタンスがない場合(クラスの大文字と変数の小文字に注意してください)。

クラスArrayListのインスタンスを指しているため、いつでもarrayList = new ArrayList()を実行し、その後_arrayList != null_を実行した場合

リストが空かどうかを知りたい場合は、

_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.
}
_

リストにnullの項目が必要ない場合は、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.
  }
}
_

最後の2つのアプローチは、よりオブジェクト指向で、よりエレガントで再利用可能なソリューションです。

更新 NPEの代わりにJeff提案IAEを使用。

22
pakore

いいえ、これは機能しません。できることは、すべての値を反復処理し、自分でチェックすることです。

boolean empty = true;
for (Object item : arrayList) {
    if (item != null) {
        empty = false;
        break;
    }
}
5
krock

ゼロが数字である-どれも表さない数字であるように-空のリストはまだリストであり、リストには何もない。 nullはリストではありません。したがって、空のリストとは異なります。

同様に、nullアイテムを含むリストはリストであり、notは空のリストです。アイテムが含まれているためです。これらのアイテム自体がnullであっても問題ありません。例として、3つのnull値を含むリスト、それ以外は何もない:その長さは?その長さは3です。空のリストの長さはゼロです。そして、もちろん、nullには長さがありません。

2
Carl Manaster

いいえ、アイテムが含まれているため、そのインスタンスが必要です。その項目がnullであるとは関係ないため、ステートメント((arrayList)!= null)== true

1
Iain Ward

配列にnull値を持つアイテムが含まれているかどうかを確認する場合は、これを使用します。

private boolean isListOfNulls(ArrayList<String> stringList){
    for (String s: stringList)
        if( s != null) return false;
    return true;
}

<String>ArrayListの対応するタイプに置き換えることができます

0
KarenAnne

まず、簡単なTestCaseを記述することで、自分でこれを検証できます!

空のArraylist(アイテムとしてnullを含む)

第二に、ArrayListがEMPTYである場合、本当に空であることを意味し、要素としてNULLまたはNON-NULLのものを含めることはできません。

第3、

 List list  = new ArrayList();
    list.add(null);
    System.out.println(list == null)

falseを出力します。

0
dira