Tableau Java String: existe-t-il une taille de méthode?

152

Je viens d'un fond php et en php, il y a une array_size()fonction qui vous dit combien d'éléments du tableau sont utilisés.

Existe-t-il une méthode similaire pour un String[]tableau? Merci.

Phill
la source
3
Heh, toutes les réponses étaient dans la même minute.
jjnguy
1
Ah, PHP avec son espace de noms global encombré. Le bon vieux temps ...
kevinji
2
je pense qu'il veut dire le compteur de php () pas array_size ()
Joshua Burns

Réponses:

277

Oui, .length(comme une propriété, pas une méthode):

String[] array = new String[10];
int size = array.length;
Kris
la source
2
salut, comment pourrions-nous trouver les documents qui répertorient toutes les propriétés et fonctions possibles de l'objet tableau? Je ne parle pas de l'objet Arrays, qui est le seul document que je puisse trouver.
GMsoF
1
@GMsoF La documentation de "[]" (tableau, pas objet Arrays) est en fait la spécification Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Edit: Ah ... le commentaire date de 2013 ...
Acapulco
44
array.length

C'est en fait un dernier membre du tableau, pas une méthode.

jjnguy
la source
2
IIRC, ce n'est pas vraiment un domaine, il en ressemble simplement à un.
Tom Hawtin - tackline
Oh, alors qu'est-ce que c'est? Quelque chose de spécial Array?
jjnguy
3
un "pseudo champ" qui est compilé en un code d'opération de longueur de tableau spécial, plutôt que le code d'opération d'accès au champ.
Pete Kirkham
2
Il s'agit d'un champ, selon §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "La longueur du champ final public, qui contient le nombre de composants du tableau ( la longueur peut être positive ou nulle). "
Michael Myers
19

En outre, il est probablement utile de noter que si vous avez un tableau multidimensionnel, vous pouvez obtenir la dimension respective simplement en ajoutant un «[0]» au tableau que vous interrogez jusqu'à ce que vous arriviez à l'axe / tuple / dimension approprié.

Ceci est probablement mieux expliqué avec le code suivant:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

Qui produit la sortie:

5
12
Liang
la source
15

Propriété finale array.length

c'est une propriété publique et définitive. C'est définitif car les tableaux en Java sont immuables par leur taille (mais mutables par la valeur de l'élément)

dfa
la source
14

Les tableaux sont des objets et ils ont un champ de longueur.

Chaîne [] haha ​​= {"olle", "bulle"};

haha.length serait 2

willcodejavaforfood
la source
Juste pour pinailler. Mais je crois que les tableaux ne sont PAS des objets en Java - ils sont l'un des deux types de variables de référence. L'autre étant des objets.
jabbie
2
@jabbie: Vraiment? Avez-vous une référence pour cela? Je le conteste uniquement parce que vous pouvez dire Object o = new String [] {"hello"};
Simon Nickerson
simon je pense que la raison pour laquelle cette déclaration fonctionne est parce qu'ils ont introduit les classes réflexives pour tous les types primitifs.
Brian Sweeney
9
Lisez la première phrase de docs.oracle.com/javase/specs/jls/se8/html/jls-10.html , puis essayez de nous dire que les tableaux ne sont pas des objets. ;)
Michael Myers
1
vous auriez pu utiliser un autre nom de variable, c'est tellement distrayant pour moi
Space Rocker
11

En java, il existe un lengthchamp que vous pouvez utiliser sur n'importe quel tableau pour connaître sa taille:

    String[] s = new String[10];
    System.out.println(s.length);
bruno conde
la source
1
merci de ne pas entrer dans les détails techniques sur ce que cela pourrait être ou non, et de simplement fournir une réponse courte et concise. +1 pour vous. :)
Joshua Burns
9

Si vous voulez qu'une fonction le fasse

Object array = new String[10];
int size = Array.getlength(array);

Cela peut être utile si vous ne savez pas quel type de tableau vous avez, par exemple int [], byte [] ou Object [].

Peter Lawrey
la source
6

Il y a une différence entre la longueur de Stringet arraypour clarifier:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string
Valona
la source
Cela devrait être mis à jour dans la question s'il s'agit d'une clarification.
Whitecat le
5

La réponse est "Tous". Un tableau java est alloué avec un nombre fixe d'emplacements d'élément. L'attribut "longueur" vous indiquera combien. Ce nombre est immuable pour la durée de vie de la baie. Pour un équivalent redimensionnable, vous avez besoin de l'une des classes java.util.List - où vous pouvez utiliser la méthode size () pour savoir combien d'éléments sont utilisés.

Cependant, il y a "En cours d'utilisation", puis il y a En cours d'utilisation . Dans un tableau d'objets de classe, vous pouvez avoir des emplacements d'élément dont les éléments sont des objets nuls, donc même s'ils comptent dans l'attribut length, mais dans les définitions de la plupart des gens, ils ne sont pas utilisés (YMMV, selon l'application). Il n'y a pas de fonction intégrée pour renvoyer les nombres nuls / non nuls.

Les objets de liste ont encore une autre définition de "En cours d'utilisation". Pour éviter une création / destruction excessive des structures de stockage sous-jacentes, il y a généralement un remplissage dans ces classes. Il est utilisé en interne, mais n'est pas compté dans la méthode size () renvoyée. Et si vous essayez d'accéder à ces éléments sans développer la liste (via les méthodes d'ajout), vous obtiendrez une exception d'index illégale.

Ainsi, pour les listes, vous pouvez avoir "En cours d'utilisation" pour les éléments non nuls, validés, Tous les éléments validés (y compris les éléments nuls) ou Tous les éléments, y compris l'espace d'expansion actuellement alloué.

Tim H
la source
2

Toutes les réponses ci-dessus sont correctes. La chose importante à observer est que les tableaux ont un attribut length mais pas une méthode length. Chaque fois que vous utilisez des chaînes et des tableaux en java, les trois modèles de base auxquels vous pourriez être confronté sont:

  1. String s = new String ("vidyasagar");
    System.out.println (s.length ()); // Dans ce cas, nous utilisons uniquement String. Aucun attribut de longueur pour les chaînes. nous devons utiliser la méthode length ().
  2. int [] s = nouveau int [10]; System.out.println (à la longueur); // ici, nous utilisons l'attribut length des tableaux.
  3. Chaîne [] s = nouvelle chaîne [10];
    System.out.println (à la longueur); // Ici, même si le type de données est String, ce n'est pas une seule chaîne. s est une référence pour un tableau de chaînes. Nous utilisons donc l'attribut length des tableaux pour exprimer combien de chaînes peuvent tenir dans ce tableau.
vidyasagar
la source
1

Ce n'est pas vraiment la réponse à votre question, mais si vous voulez avoir quelque chose comme un tableau qui peut croître et se réduire, vous ne devriez pas utiliser un tableau en java. Vous êtes probablement le meilleur en utilisant ArrayList ou une autre implémentation de List.

Vous pouvez ensuite appeler size () dessus pour obtenir sa taille.

Simon Groenewolt
la source