Matrice di stringhe Java: esiste una dimensione del metodo?


152

Vengo da uno sfondo php e in php, c'è una array_size()funzione che ti dice quanti elementi nell'array sono usati.

Esiste un metodo simile per un String[]array? Grazie.


3
Heh, tutte le risposte erano nello stesso minuto.
jjnguy,

1
Ah, PHP con il suo ingombrante spazio dei nomi globale. I bei vecchi tempi ...
Kevinev

2
penso che significhi il conteggio di php () non array_size ()
Joshua Burns,

Risposte:


277

Sì, .length(simile a una proprietà, non un metodo):

String[] array = new String[10];
int size = array.length;

2
ciao, come possiamo trovare i documenti che elencano tutte le possibili proprietà e funzioni dell'oggetto array? Non intendo l'oggetto Array che è l'unico documento che riesco a trovare.
GMsoF,

1
@GMsoF La documentazione per "[]" (array, non oggetto Arrays) è in realtà la specifica Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Modifica: Ah ... il commento è del 2013 ...
Acapulco,

44
array.length

In realtà è un membro finale dell'array, non un metodo.


2
IIRC, in realtà non è un campo, sembra solo uno.
Tom Hawtin - tackline

Oh, allora cos'è? Qualche cosa di matrice speciale?
jjnguy,

3
uno "pseudo campo" che viene compilato in uno speciale codice di lunghezza della matrice, anziché nel codice di accesso al campo.
Pete Kirkham,

2
È un campo, secondo §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "La lunghezza del campo finale pubblico, che contiene il numero di componenti dell'array ( lunghezza può essere positiva o zero). "
Michael Myers

19

Inoltre, è probabilmente utile notare che se si dispone di un array multidimensionale, è possibile ottenere la rispettiva dimensione semplicemente aggiungendo uno '[0]' all'array che si sta interrogando fino ad arrivare all'asse / tupla / dimensione appropriati.

Questo è probabilmente meglio spiegato con il seguente codice:

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
    }

}

Che produce l'output:

5
12

15

proprietà finale array.length

è di proprietà pubblica e finale. È definitivo perché le matrici in Java sono immutabili per dimensione (ma mutabili per il valore dell'elemento)


14

Le matrici sono oggetti e hanno un campo di lunghezza.

String [] haha ​​= {"olle", "bulle"};

haha.length sarebbe 2


Solo per nitpick. Ma credo che le matrici NON siano oggetti in Java - sono uno dei due tipi di variabili di riferimento. Gli altri sono oggetti.
Jabbie,

2
@jabbie: Davvero? Hai un riferimento per questo? Lo metto in dubbio solo perché puoi dire Object o = new String [] {"hello"};
Simon Nickerson,

simon penso che la ragione per cui funziona questa affermazione sia perché hanno introdotto le classi riflessive per tutti i tipi primitivi.
Brian Sweeney,

9
Leggi la prima frase di docs.oracle.com/javase/specs/jls/se8/html/jls-10.html e poi prova a dirci che le matrici non sono oggetti. ;)
Michael Myers

1
avresti potuto usare qualche altro nome di variabile, mi distrae così tanto
Space Rocker,

11

In java c'è un lengthcampo che puoi usare su qualsiasi array per scoprire le sue dimensioni:

    String[] s = new String[10];
    System.out.println(s.length);

1
grazie per non essere entrato nei tecnicismi su ciò che potrebbe o non potrebbe essere, e semplicemente per fornire una risposta breve e concisa. +1 per te. :)
Joshua Burns,

9

Se si desidera che una funzione esegua questa operazione

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

Questo può essere utile se non sai quale tipo di array hai ad esempio int [], byte [] o Object [].


6

C'è una differenza tra lunghezza di Stringe arraychiarire:

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

Questo dovrebbe essere aggiornato nella domanda se si tratta di chiarimenti.
Whitecat,

5

La risposta è "Tutti loro". Un array Java è allocato con un numero fisso di slot degli elementi. L'attributo "lunghezza" ti dirà quanti. Quel numero è immutabile per la vita dell'array. Per un equivalente ridimensionabile, è necessaria una delle classi java.util.List - dove è possibile utilizzare il metodo size () per scoprire quanti elementi sono in uso.

Tuttavia, c'è "In uso" e poi c'è In uso . In una matrice di oggetti di classe, è possibile avere slot di elementi i cui elementi sono oggetti null, quindi anche se contano nell'attributo length, ma le definizioni della maggior parte delle persone, non sono in uso (YMMV, a seconda dell'applicazione). Non esiste una funzione incorporata per restituire i conteggi null / non-null.

Gli oggetti elenco hanno ancora un'altra definizione di "In uso". Per evitare un'eccessiva creazione / distruzione delle strutture di archiviazione sottostanti, in genere in queste classi c'è un po 'di riempimento. Viene utilizzato internamente, ma non viene conteggiato nel metodo size () restituito. E se si tenta di accedere a tali elementi senza espandere l'elenco (tramite i metodi di aggiunta), si otterrà un'eccezione di indice illegale.

Pertanto, per gli elenchi, è possibile avere "In uso" per elementi impegnati non nulli, Tutti gli elementi impegnati (inclusi gli elementi null) o Tutti gli elementi, incluso lo spazio di espansione attualmente allocato.


2

Tutte le risposte di cui sopra sono corrette. La cosa importante da osservare è che le matrici hanno un attributo di lunghezza ma non un metodo di lunghezza. Ogni volta che usi stringhe e array in java, i tre modelli base che potresti incontrare sono:

  1. String s = new String ("vidyasagar");
    System.out.println (s.length ()); // In questo caso stiamo usando solo String. Nessun attributo di lunghezza per le stringhe. dobbiamo usare il metodo length ().
  2. int [] s = new int [10]; System.out.println (s.length); // qui usiamo l'attributo length delle matrici.
  3. String [] s = new String [10];
    System.out.println (s.length); // Qui anche se il tipo di dati è String, non è una singola stringa. s è un riferimento per la matrice di stringhe. Quindi usiamo l'attributo length degli array per esprimere quante stringhe possono adattarsi a quell'array.

1

Non proprio la risposta alla tua domanda, ma se vuoi avere qualcosa come un array che può crescere e restringersi non dovresti usare un array in Java. Probabilmente è meglio usare ArrayList o un'altra implementazione di Elenco.

È quindi possibile chiamare size () su di esso per ottenere la dimensione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.