2010-07-08 9 views
26

Est-ce qu'un Arraylist vide (avec des valeurs null comme éléments) est considéré comme nul? Donc, pour l'essentiel serait l'énoncé ci-dessous vrai:ArrayList vide est nul

if (arrayList != null) 

grâce

Répondre

61

No.

une liste de tableaux peut être vide (ou avec des valeurs nulles comme des éléments) d'un pas être nulle. Ce serait considéré comme vide. Vous pouvez vérifier am ArrayList vide 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 nulls:

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

    return true; 
} 
+3

Pourquoi ne pas revenir booléenne (type primitif) au lieu de Boolean (objet)? –

+0

pouvez-vous me donner un exemple que la façon de créer un arrayList vide? – Venki

1

Non, parce qu'il contient des éléments qu'il doit y avoir une instance de celui-ci. Ses éléments étant nul est hors de propos, de sorte que le statment ((arrayList)! = Null) == true

20

arrayList == null s'il n'y a aucune instance de la classe ArrayList attribuée à la arrayList variable (noter la upercase pour les classes et les minuscules pour variables).

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

Si vous voulez savoir si la liste est vide, ne

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 « t veulent des articles null dans votre liste, je vous suggère d'étendre la classe ArrayList avec votre propre, 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 vous pouvez 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 plus orientées objet, plus élégantes et réutilisables.

Mis à jour avec la suggestion Jeff IAE au lieu de NPE.

+0

suggestions de Nice! J'utiliser un IllegalArgumentException plutôt que d'un NPE dans l'exemple NotNullArrayList. – Jeff

+0

Jeff, bonne suggestion. Je l'ai changé. – pakore

4

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

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

Ce qui serait faux pour retourner une liste contenant une seule valeur nulle, donc peut-être pas. –

+0

@Mark merci, fixe. On dirait que le titre "Empty ArrayList est nul" m'a jeté. – krock

0

Tout d'abord, vous pouvez vérifier cela sur votre propre en écrivant un TestCase est simple!

vide Arraylist (avec ses articles comme des valeurs nulles)

En second lieu, si ArrayList est vide, cela signifie qu'il est vraiment vide, il ne peut pas avoir des choses NULL ou non NULL comme élément.

Troisièmement,

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

imprimerait faux.

2

Tout comme zéro est un nombre - juste un nombre qui représente aucune - une liste vide est toujours une liste, juste une liste qui ne contient rien. null a pas de liste du tout; c'est donc différent d'une liste vide.

De même, une liste qui contient des éléments NULL est une liste, et est pas une liste vide. Parce qu'il contient des objets; Peu importe que ces objets 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 3. La longueur de la liste vide est zéro. Et, bien sûr, null n'a pas une longueur.

0

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> avec le type correspondant à votre ArrayList