wake-up-neo.com

Wie kann ich überprüfen, ob ein Array leer/leer ist?

Ich habe ein int-Array, das keine Elemente enthält, und ich versuche zu prüfen, ob es leer ist.

Warum ist die if-Anweisung im folgenden Code beispielsweise niemals wahr?

int[] k = new int[3];

if(k==null)
{
    System.out.println(k.length);
}
101
Ankit Sachan

Es gibt einen Hauptunterschied zwischen einem null-Array und einem leeren Array. Dies ist ein Test für null.

int arr[] = null;
if (arr == null) {
  System.out.println("array is null");
}

"Leer" hat hier keine offizielle Bedeutung. Ich entscheide mich für leer als 0 Elemente zu definieren

arr = new int[0];
if (arr.length == 0) {
  System.out.println("array is empty");
}

Eine alternative Definition von "leer" ist, wenn alle Elemente null sind:

Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
  if (arr[i] != null) {
    empty = false;
    break;
  }
}

oder

Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
  if (ob != null) {
    empty = false;
    break;
  }
}
175
cletus

ArrayUtils.isNotEmpty(testArrayName) aus dem Paket org.Apache.commons.lang3 stellt sicher, dass Array nicht leer oder leer ist

63

Schauen Sie sich die Länge an:

int[] i = ...;
if (i.length == 0) { } // no elements in the array

Es ist jedoch sicherer, gleichzeitig nach null zu suchen:

if (i == null || i.length == 0) { }
17
Mike

Ich bin aus .net Hintergrund. Java/c # ist jedoch mehr oder weniger gleich.

Wenn Sie einen nicht primitiven Typ (Array in Ihrem Fall) instanziieren, ist er nicht null.
z.B. int[] numbers = new int[3];
In diesem Fall wird der Speicherplatz zugewiesen und jedes Element hat den Standardwert 0.

Es wird null sein, wenn es nicht new ist.
z.B. 

int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
   System.out.println("yes, it is null. Please new it up");
}
4
shahkalpesh

Der Punkt hier ist ganz einfach, dass die Variable k nicht null ist, weil sie auf das Array zeigt. Es spielt keine Rolle, dass das Array selbst leer ist. Der Nulltest in Ihrem Beitrag würde nur dann als wahr ausgewertet werden, wenn die Variable k nicht auf irgendetwas verweist.

2
hubbabubba

Ich habe wie unten getestet. Ich hoffe es hilft. 

Integer[] integers1 = new Integer[10];
        System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array
        for (Integer integer : integers1) {
            System.out.println(integer); //prints all 0s
        }

//But if I manually add 0 to any index, now even though array has all 0s elements
//still it is not empty
//        integers1[2] = 0;
        for (Integer integer : integers1) {
            System.out.println(integer); //Still it prints all 0s but it is not empty
            //but that manually added 0 is different
        }

//Even we manually add 0, still we need to treat it as null. This is semantic logic.

        Integer[] integers2 = new Integer[20];
        integers2 = null; //array is nullified
//        integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. 
        if (integers2 == null) {
            System.out.println("null Array");
        }   
2
Uddhav Gautam

Ein int-Array wird mit Null initialisiert, so dass es niemals Nullen enthält. Nur Arrays von Object enthalten anfangs Null.

2
objects

In org.Apache.commons.lang ist auch eine Methode zum Überprüfen des Arrays auf null oder leer vorhanden:

import org.Apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);
0
Jackkobec
    public boolean empty() {
    boolean isEmpty = true;
    int i = 0;
    for (int j = 0; j < array.length; j++) {
        if (array[j] != 0) {
            i++;
        }
    }
    if (i != 0) {
        isEmpty = false;
    }
    return isEmpty;
}

Dies ist so nahe, wie ich zur Überprüfung kam, ob ein int-Array leer ist . Dies funktioniert zwar nicht, wenn die ints im Array tatsächlich Null sind. Es funktioniert für {1,2,3} und es wird immer noch false zurückgegeben, wenn {2,0} aber {0} den Wert true zurückgibt

0
nanatash

Ein int-Array ohne Elemente muss nicht unbedingt null sein. Es wird nur null sein, wenn es noch nicht vergeben wurde. In diesem Tutorial finden Sie weitere Informationen zu Java-Arrays.

Sie können die Länge des Arrays testen:

void foo(int[] data)
{
  if(data.length == 0)
    return;
}
0
unwind

Sie können auch prüfen, ob Elemente im Array vorhanden sind, indem Sie die Länge herausfinden und dann in die if-else-Anweisung einfügen, um zu prüfen, ob sie null ist. 

int[] k = new int[3];
if(k.length == 0)
{
//do something
}
0
J_fruitty