ArrayList vide est égal à null

Un Arraylist vide (avec nulls comme éléments) est-il considéré comme null? Donc, essentiellement, l'énoncé ci-dessous serait-il vrai:

if (arrayList != null) 

Merci

29
demandé sur Rahul Jain 2010-07-08 16:44:27

7 réponses

Non.

Une ArrayList peut être vide (ou avec des valeurs NULL comme éléments) et ne pas être null. Il serait considéré comme vide. Vous pouvez vérifier am empty ArrayList avec:

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

Ou si vous voulez créer une méthode qui vérifie une ArrayList avec seulement des valeurs NULL:

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

    return true;
}
67
répondu Justin Niessner 2013-05-28 02:20:10

arrayList == null s'il n'y a pas d'instance de la classe ArrayList affectée à la variable arrayList (Notez l'upercase pour les classes et la minuscule pour les variables).

Si, à tout moment, vous faites arrayList = new ArrayList() Alors arrayList != null parce que pointe vers une instance de la classe ArrayList

Si vous voulez savoir si la liste est vide, faites

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

Si vous ne voulez pas d'éléments null dans votre liste, je vous suggère d'étendre la classe ArrayList avec la vôtre, par exemple:

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);
    }
}

Ou peut-être que vous pouvez étendre il faut avoir une méthode dans votre propre classe qui redéfinit le concept de "liste vide".

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

Les deux dernières approches sont des solutions plus orientées objet, plus élégantes et réutilisables.

Mise à jour avec Jeff suggestion IAE au lieu de NPE.

21
répondu pakore 2010-07-08 14:03:28

Non, cela ne fonctionnera pas. Le mieux que vous pourrez faire est de parcourir toutes les valeurs et de les vérifier vous-même:

boolean empty = true;
for (Object item : arrayList) {
    if (item != null) {
        empty = false;
        break;
    }
}
5
répondu krock 2010-07-08 12:54:07

Tout comme le zéro est un nombre, un nombre qui représente aucun - une liste vide est toujours une liste, une liste avec rien dedans. null n'est pas une liste du tout; il est donc différent d'une liste vide.

De Même, une liste qui contient la valeur null éléments d'une liste, et est pas une liste vide. Parce qu'il a des éléments dedans; peu importe que ces éléments soient eux-mêmes nuls. A titre d'exemple, une liste avec trois valeurs nulles, et rien d'autre: Quelle est sa longueur? Sa longueur est de 3. La longueur de la liste vide est nulle. Et, bien sûr, null n'a pas de longueur.

2
répondu Carl Manaster 2010-07-08 14:07:27

Non, car il contient des éléments il doit y avoir une instance. Ses éléments étant null n'est pas pertinent, donc le statment ((arrayList) != null) == true

1
répondu w69rdy 2010-07-08 12:45:19

Tout d'abord, vous pouvez vérifier cela par vous-même en écrivant un simple TestCase!

ArrayList vide (avec nulls comme éléments)

Deuxièmement, si ArrayList est vide, cela signifie qu'il est vraiment vide , Il ne peut pas avoir des choses nulles ou non nulles comme élément.

Troisième,

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

Imprimerait faux.

0
répondu Dipesh Rathod 2010-07-08 12:48:52

Si vous voulez vérifier si le tableau contient des éléments avec des valeurs nulles, utilisez ceci:

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

Vous pouvez remplacer <String> avec le type correspondant à votre ArrayList

0
répondu KarenAnne 2013-05-28 02:14:27