2010-07-08 16 views

Respuesta

61

No.

un ArrayList puede estar vacía (o con valores nulos como artículos) un no ser nulo. Se consideraría vacío. Puede comprobar am ArrayList vacío con:

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

O si desea crear un método que comprueba si un ArrayList con sólo nulos:

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

    return true; 
} 
+3

¿Por qué no se devuelve booleano (tipo primitivo) en lugar de booleano (objeto)? –

+0

¿me puede dar un ejemplo de cómo crear una lista de arreglos vacía? – Venki

1

No, ya que contiene elementos no debe ser una instancia de la misma. Sus elementos que se están nula es irrelevante, por lo que el DECLARACIÓN ((arrayList)! = Null) == true

20

arrayList == null si no hay instancia de la clase ArrayList asignado a la variable arrayList (tenga en cuenta la MAYÚSCULAS COMPLETAS para las clases y las minúsculas para variables).

Si, en cualquier momento, lo hace arrayList = new ArrayList() continuación arrayList != null porque se apunta a una instancia de la clase ArrayList

Si desea saber si la lista está vacía, no

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 Don 't desea que los elementos nulos en su lista, le sugeriría a extender la clase ArrayList con su propia, por ejemplo:

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

O tal vez puede ampliarlo para tener un método dentro de su propia clase que redefine el concepto de "Lista vacía".

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

Los dos últimos enfoques son soluciones más orientadas a objetos, más elegantes y reutilizables.

Actualizado con Jeff sugerencia IAE en lugar de NPE.

+0

sugerencias Niza! Usaría una IllegalArgumentException en lugar de un NPE en el ejemplo de NotNullArrayList. – Jeff

+0

Jeff, buena sugerencia. Lo he cambiado – pakore

4

No, esto no va a funcionar. La mejor usted será capaz de hacer es iterar a través de todos los valores y las comprobar usted mismo:

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

Que devolvería falso para una lista que contiene un único valor nulo, por lo que tal vez no. –

+0

@Mark gracias, corregido. Parece que el título 'Empty ArrayList es igual a null' me arrojó. – krock

0

En primer lugar, puede verificar esto en su propia escribiendo un TestCase simple!

vacío Arraylist (con nulos como sus artículos)

segundo lugar, si ArrayList está vacía Esto significa que es realmente vacío , no podemos tener cosas nulo o no nulo como elemento.

En tercer lugar,

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

imprimiría falsa.

2

Así como el cero es un número, solo un número que representa ninguno, una lista vacía sigue siendo una lista, solo una lista sin nada. null no es una lista en absoluto; por lo tanto, es diferente de una lista vacía.

De forma similar, una lista que contiene elementos nulos es una lista, y es no una lista vacía. Porque tiene elementos en él; no importa que esos elementos sean en sí mismos nulos. Como ejemplo, una lista con tres valores nulos y nada más: ¿cuál es su longitud? Su longitud es 3. La longitud de la lista vacía es cero. Y, por supuesto, null no tiene una longitud.

0

Si desea comprobar si la matriz contiene elementos con valores nulos, utilice esto:

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

Se podría sustituir <String> con el tipo correspondiente para sus ArrayList