it-swarm.com.de

Leere ArrayList ist gleich null

Wird eine leere Arrayliste (mit Nullen als Elementen) als Null betrachtet? Im Wesentlichen würde also die folgende Aussage zutreffen: 

if (arrayList != null) 

vielen Dank

29
Global Dictator

Nein.

Eine ArrayList kann leer sein (oder mit Nullen als Elemente) und nicht Null sein. Es wäre leer. Sie können nach einer leeren ArrayList suchen mit:

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

Oder wenn Sie eine Methode erstellen möchten, die nach einer ArrayList mit nur Nullwerten sucht:

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, wenn der Variablen ArrayList keine Instanz der Klasse arrayList zugewiesen ist (beachten Sie die Upercase für Klassen und die Kleinbuchstaben für Variablen).

Wenn Sie arrayList = new ArrayList() jederzeit tun, dann arrayList != null, weil auf eine Instanz der Klasse ArrayList verwiesen wird.

Wenn Sie wissen möchten, ob die Liste leer ist, tun Sie dies 

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

Wenn Sie keine leeren Elemente in Ihrer Liste haben möchten, würde ich Ihnen empfehlen, die ArrayList-Klasse um eigene zu erweitern. Beispiel: 

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

Oder Sie können es erweitern, um eine Methode in Ihrer eigenen Klasse zu haben, die das Konzept der "leeren Liste" neu definiert.

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

Die letzten beiden Ansätze sind objektorientiertere, elegantere und wiederverwendbare Lösungen.

Aktualisiert mit Jeff-Vorschlag IAE anstelle von NPE.

21
pakore

Nein, das wird nicht funktionieren. Das Beste, was Sie tun können, ist, alle Werte zu durchlaufen und sie selbst zu überprüfen:

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

So wie Null eine Zahl ist - nur eine Zahl, die keine darstellt - ist eine leere Liste immer noch eine Liste, nur eine Liste, die nichts enthält. null ist überhaupt keine Liste; es unterscheidet sich daher von einer leeren Liste.

In ähnlicher Weise ist eine Liste, die null Elemente enthält, eine Liste und ist nicht eine leere Liste. Weil es Gegenstände darin hat; Es spielt keine Rolle, dass diese Elemente selbst null sind. Als Beispiel eine Liste mit drei Nullwerten und nichts weiter: Wie lang ist sie? Ihre Länge beträgt 3. Die Länge der leeren Liste ist Null. Und natürlich hat null keine Länge.

2
Carl Manaster

Nein, da es Elemente enthält, muss es eine Instanz davon geben. Da es sich bei den Elementen um null handelt, ist dies irrelevant

1
w69rdy

Wenn Sie prüfen möchten, ob das Array Elemente mit Nullwerten enthält, verwenden Sie Folgendes:

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

Sie könnten <String> durch den entsprechenden Typ für Ihre ArrayList ersetzen.

0
KarenAnne

Sie können dies zunächst selbst überprüfen, indem Sie ein einfaches Testfall schreiben!

leere Arrayliste (mit Nullen als Elementen) 

Zweitens: Wenn ArrayList LEER ist, bedeutet das, dass es wirklich leer ist , es dürfen keine NULL- oder NON-NULL-Elemente als Element enthalten.

Dritte, 

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

würde falsch drucken.

0
Dipesh Rathod