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];
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];
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é.
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 ( ""
).
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.
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.