87 votes

Pourquoi Java autorise-t-il les tableaux de taille 0 ?

Contrairement au C, où vous pouvez augmenter dynamiquement la taille d'un tableau, les tableaux en Java ont une longueur fixe. Pourquoi Java autorise-t-il alors les tableaux de taille 0 ?

String[] strings = new String[0];

128voto

Noon Silk Points 30396

Cela signifie qu'il est vide. En d'autres termes, vous pouvez le parcourir en boucle comme s'il contenait des éléments et n'obtenir aucun résultat :

for(int k = 0; k < strings.length; k++){
   // something
}

Ce qui évite de devoir vérifier. Si le tableau en question était null Dans ce cas, une exception se produirait, mais dans ce cas, il ne fait rien, ce qui peut être approprié.

54voto

Andreas_D Points 64111

Pourquoi Java autorise-t-il les tableaux de taille 1 ? N'est-il pas plutôt inutile d'envelopper une seule valeur dans un tableau ? Ne serait-il pas suffisant que Java autorise uniquement les tableaux de taille 2 ou plus ?

Oui, nous pouvons passer null au lieu d'un tableau vide et un seul objet ou primitive au lieu d'une matrice de taille un.

Mais il existe de bons arguments contre une telle restriction. Mes meilleurs arguments personnels :

La restriction est trop compliquée et pas vraiment nécessaire

Pour limiter les tableaux aux tailles [1..INTEGER.MAX_INT], il faudrait ajouter beaucoup de contrôles supplémentaires du bouddhisme, (en accord avec le commentaire de Konrad) la logique de conversion et les surcharges de méthodes dans notre code. L'exclusion de 0 (et peut-être de 1) des tailles de tableau autorisées ne permet pas de réaliser des économies, elle exige des efforts supplémentaires et a un impact négatif sur les performances.

Vecteur de modèles de tableaux

Un tableau est un bon modèle de données pour un vecteur (mathématiques, no le site Vector classe !). Et bien sûr, un vecteur en mathématiques peut être de dimension zéro. Ce qui est conceptuellement différent d'être inexistant.


Sidenote - une enveloppe importante pour un tableau (de caractères) est la fonction String classe. L'immuable String matérialise le concept de tableau vide : c'est la chaîne vide ( "" ).

28voto

On Freund Points 3479

Parfois, il est beaucoup plus convivial de retourner un tableau de taille nulle que null.

17voto

Behrang Points 13471

Considérez ceci (une explication plus détaillée de la réponse de Noon) :

public String[] getStrings() {
 if( foo ) {
  return null;
 } else {
  return new String[] {"bar, "baz"};
 }
}

String[] strings = getStrings();
if (strings != null) {
 for (String s : strings) {
  blah(s);
 }
}

Maintenant, comparez-le à ceci :

public String[] getStrings() {
 if( foo ) {
  return new String[0];
 } else {
  return new String[] {"bar, "baz"};
 }
}

// the if block is not necessary anymore
String[] strings = getStrings();
for (String s : strings) {
 blah(s);
}

Ceci (renvoyer des tableaux vides plutôt que des valeurs nulles), est en fait une meilleure pratique dans le monde de la conception des API Java.

En outre, en Java, vous pouvez convertir des listes (par exemple ArrayList) en tableaux et il est logique de convertir une liste vide en un tableau vide.

6voto

Dan McGrath Points 9839

Comme pour le C++, il permet une gestion plus propre lorsqu'il n'y a pas de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X