web-dev-qa-db-fra.com

Vide ArrayList est égal à null

Un Arraylist vide (avec les éléments nuls comme éléments) est-il considéré comme nul? Donc, essentiellement, la déclaration ci-dessous serait vraie: 

if (arrayList != null) 

merci

29
Global Dictator

Non.

Un ArrayList peut être vide (ou avec NULL en tant qu'éléments) sans être null. Ce serait considéré comme vide. Vous pouvez vérifier si je suis vide 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 recherche un ArrayList avec seulement des NULL:

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

    return true;
}
68
Justin Niessner

arrayList == null s'il n'y a pas d'instance de la classe ArrayList affectée à la variable arrayList (notez les majuscules des classes et les minuscules des variables).

Si, à tout moment, vous faites arrayList = new ArrayList() puis arrayList != null car il 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 nuls 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 pouvez-vous l'étendre pour 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 suggestion de Jeff IAE au lieu de NPE.

21
pakore

Non, cela ne fonctionnera pas. Le mieux que vous puissiez 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
krock

Tout comme zéro est un nombre - juste un nombre qui ne représente rien - une liste vide reste une liste, juste une liste ne contenant rien. null n'est pas une liste du tout; c'est donc différent d'une liste vide.

De même, une liste contenant des éléments nuls est une liste et est pas une liste vide. Parce qu'il contient des objets; peu importe que ces éléments soient eux-mêmes nuls. Par exemple, une liste contenant trois valeurs NULL et rien d’autre: quelle est sa longueur? Sa longueur est de 3. La longueur de la liste vide est zéro. Et bien sûr, null n'a pas de longueur.

2
Carl Manaster

Non, car il contient des éléments, il doit en exister une instance. Ses éléments étant nuls n’ayant aucune importance, la déclaration ((arrayList)! = Null) == true

1
w69rdy

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

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

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

0
KarenAnne

Tout d’abord, vous pouvez le vérifier vous-même en écrivant un simple TestCase!

arraylist vide (avec null comme éléments) 

Deuxièmement, si ArrayList est VIDE, cela signifie qu'il est vraiment vide , il ne peut avoir d'éléments NULL ou NON-NULL.

Troisième, 

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

serait imprimer faux.

0
Dipesh Rathod