web-dev-qa-db-fra.com

Comment puis-je vérifier si un tableau est nul/vide?

J'ai un tableau int qui ne contient aucun élément et j'essaie de vérifier s'il est vide.

Par exemple, pourquoi l'instruction if dans le code ci-dessous n'est-elle jamais vraie?

int[] k = new int[3];

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

Il existe une différence clé entre un tableau null et un tableau vide. Ceci est un test pour null.

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

"Vide" n'a ici aucune signification officielle. Je choisis de définir vide comme ayant 0 éléments:

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

Une autre définition de "vide" est si tous les éléments sont null:

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

ou

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

ArrayUtils.isNotEmpty(testArrayName) du package org.Apache.commons.lang3 garantit que le tableau n'est ni nul ni vide

63
Shravan Ramamurthy

Regardez sa longueur:

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

Bien qu'il soit plus sûr de vérifier null en même temps:

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

Je viens de fond .net. Cependant, Java/c # est plus/moins identique.

Si vous instanciez un type non primitif (tableau dans votre cas), il ne sera pas nul.
par exemple. int[] numbers = new int[3];
Dans ce cas, l’espace est alloué et chaque élément a une valeur par défaut de 0.

Ce sera null, quand vous ne le new pas.
par exemple. 

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

Le point ici est très simplement que la variable k n’est pas nulle parce qu’elle pointe vers le tableau. Peu importe que le tableau lui-même soit vide. Le test null dans votre message n'évaluerait que si la variable k ne pointait vers rien.

2
hubbabubba

J'ai testé comme ci-dessous. J'espère que ça aide. 

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

Un tableau int est initialisé avec zéro afin qu'il ne contienne jamais de valeur NULL. Seuls les tableaux d'objets contiendront null initialement.

2
objects

La méthode pour vérifier la valeur null ou vide du tableau est également présente sur org.Apache.commons.lang:

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

C’est aussi près que cela m’a permis de vérifier si un tableau int est vide . Bien que cela ne fonctionne pas lorsque les ints du tableau sont réellement nuls. Cela fonctionnera pour {1,2,3}, et retournera toujours faux si {2,0} mais {0} retournera vrai

0
nanatash

Un tableau int sans éléments n'est pas nécessairement null. Ce ne sera que null s'il n'a pas encore été attribué. Voir ce tutoriel pour plus d’informations sur les baies Java.

Vous pouvez tester la longueur du tableau:

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

Vous pouvez également vérifier s'il y a des éléments dans le tableau en recherchant sa longueur, puis placez-le dans une instruction if-else pour vérifier s'il est null. 

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