2010-07-08 13 views

risposta

61

No.

Un ArrayList può essere vuoto (o con i null come elementi) un non essere nullo. Sarebbe considerato vuoto. È possibile verificare la presenza del mattino ArrayList vuota con:

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

Oppure, se si desidera creare un metodo che verifica la presenza di un ArrayList con solo valori null:

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

    return true; 
} 
+3

Perché non restituire il valore booleano (tipo primitivo) anziché quello booleano (oggetto)? –

+0

puoi darmi un esempio su come creare una lista di array vuota? – Venki

1

No, perché contiene elementi ci deve essere un esempio di esso. I suoi articoli che sono nulla è irrilevante, in modo che lo statment ((arrayList)! = Null) == true

20

arrayList == null se non ci sono istanza della classe ArrayList assegnato alla variabile arrayList (notare la MAIUSCOLE per le classi e la minuscola per variabili).

Se, in qualsiasi momento, si fa arrayList = new ArrayList() poi arrayList != null perché sta puntando a un'istanza della classe ArrayList

Se volete sapere se l'elenco è vuoto, non

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

Se don 't vuole elementi nulli nel proprio elenco, io suggerirei di estendere la classe ArrayList con il proprio, per esempio:

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 forse puoi estenderlo per avere un metodo all'interno della tua classe che ridefinisce il concetto di "Lista vuota".

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

Gli ultimi due approcci sono più orientati agli oggetti, più eleganti e soluzioni riutilizzabili.

Aggiornamento con suggerimento Jeff IAE anziché NPE.

+0

suggerimenti Nizza! Vorrei utilizzare un IllegalArgumentException piuttosto che un NPE nell'esempio NotNullArrayList. – Jeff

+0

Jeff, buon suggerimento. L'ho cambiato – pakore

4

No, questo non funzionerà. Il meglio che si sarà in grado di fare è per scorrere tutti i valori e verificare voi stessi:

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

Quale potrebbe restituire false per un elenco contenente un singolo valore null, quindi forse no. –

+0

@Mark grazie, risolto. Sembra che il titolo 'Empty ArrayList è uguale a zero' mi ha gettato. – krock

0

Prima di tutto, è possibile verificare da soli, scrivendo un semplice TestCase!

vuota Arraylist (con valori nulli come suoi elementi)

secondo luogo, se ArrayList è vuoto che significa che è veramente vuoto, non può avere cose NULL o non nullo come elemento.

In terzo luogo,

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

sarebbe stampare falsi.

2

Proprio come zero è un numero - solo un numero che non ne rappresenta nessuno - una lista vuota è ancora una lista, solo una lista senza nulla in essa. null non è un elenco; è quindi diverso da una lista vuota.

Analogamente, un elenco che contiene elementi null è un elenco ed è non un elenco vuoto. Perché ha oggetti in esso; non importa che quegli oggetti siano essi stessi nulli. Ad esempio, una lista con tre valori nulli in essa, e nient'altro: qual è la sua lunghezza? La sua lunghezza è 3. La lunghezza della lista vuota è zero. E, ovviamente, null non ha una lunghezza.

0

Se si vuole verificare se l'array contiene elementi con valori nulli, utilizzare questo:

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

È possibile sostituire <String> con il tipo corrispondente per le ArrayList