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.