Array-Länge in Java

101

Ich habe ein Array wie folgt deklariert:

int[] arr = new int[10];

Dann habe ich dem Array folgende Werte zugewiesen:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;

Dann habe ich eine ganzzahlige Variable deklariert und initialisiert:

int arrayLength = arr.length;

Dies ist nützlich, um die tatsächliche Größe zu ermitteln. Gibt es jedoch eine Methode zum Ermitteln der logischen Größe des Arrays?

Kiran Bhat
quelle

Antworten:

85

Es enthält die zugewiesene Größe 10. Die nicht zugewiesenen Indizes enthalten den Standardwert 0für int.

Kai
quelle
3
Ja, Arrays sind statische Speicherzuordnungen.
Ramon Saraiva
3
Können Sie den Javadoc zeigen? Ich weiß nicht, wo diese "Länge" -Eigenschaft ist.
Philip Rego
1
@PhilipRego Es ist in der Sprachspezifikation docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.3
Torben
71

Zuallererst lengthist eine Eigenschaft, also wäre es arr.lengthstatt arr.length().

Und es wird 10, die deklarierte Größe, zurückgegeben. Die Elemente, die Sie nicht explizit deklarieren, werden mit 0 initialisiert.

Costi Ciudatu
quelle
Length () für den Array-Typ long [] Java (67108980) kann nicht aufgerufen werden
Alessandro Ornano
22

Um die Länge eines Arrays zu ermitteln A, sollten Sie die lengthEigenschaft verwenden. Es wird A.lengthnicht A.length()hauptsächlich für die Größe von Zeichenfolgen-bezogenen Objekten verwendet.

Geben Sie hier die Bildbeschreibung ein

Die Eigenschaft length zeigt während der Initialisierung immer den gesamten dem Array zugewiesenen Speicherplatz an.

Wenn Sie jemals eines dieser Probleme haben, können Sie es einfach ausführen. Viel Spaß beim Programmieren!

Ravi Pandey
quelle
6

Arrays sind statische Speicherzuordnungen. Wenn Sie also ein Array von Ganzzahlen initialisieren:

int[] intArray = new int[15];

Die Länge beträgt immer 15, egal wie viele Indizes gefüllt sind.

Und eine andere Sache, wenn Sie ein Array von ganzen Zahlen initialisieren, werden alle Indizes mit "0" gefüllt.

Ramon Saraiva
quelle
5

In Java sind Ihre "tatsächliche" und "logische" Größe gleich. Die Laufzeit füllt alle Array-Slots bei der Zuweisung mit Standardwerten. Ihr aenthält also 10.

Dolch
quelle
5

In diesem Fall gibt arr.length 10 zurück, die Größe des von Ihnen zugewiesenen Arrays. Die logische Größe trifft hier nicht wirklich zu, da dies ein Array mit fester Länge ist.

Wenn Sie das Array initialisieren:

int[] arr = new int[10];

Java erstellt ein Array mit 10 Elementen und initialisiert alle diese auf 0. Einzelheiten zu den Anfangswerten für diesen und andere primitive Typen finden Sie in der Java-Sprachspezifikation .

Tom Elliott
quelle
4
int[] arr = new int[10];

arrist ein intTyparray mit Größe 10. Es ist eine Reihe von 10Elementen. Wenn wir ein Array nicht standardmäßig initialisieren, enthält das Array-Element den Standardwert. Im Falle eines int-Arrays ist der Standardwert 0.

Länge ist eine Eigenschaft, die für ein Array gilt.
hier arr.lengthwird geben 10.

Anil
quelle
3

`

int array [] = new int [3]; array.length;

Also haben wir hier ein Array mit einem Speicherplatz von 3 erstellt ... so sieht es tatsächlich aus

0. 1. 2. ...........> Index 2 4 5 ...........> Nummer

Wie Sie sehen, beträgt die Größe dieses Arrays 3, aber der Index des Arrays beträgt nur bis zu 2, da jedes Array mit dem 0. Index beginnt.

Die Ausgabe der zweiten Anweisung soll 3 sein, da die Länge des Arrays 3 beträgt. Bitte verwechseln Sie nicht den Indexwert und die Länge des Arrays.

Prost!

Ayush Murty AH
quelle
2
  int arr[]={4,7,2,21321,657,12321};
  int length =arr.length;
  System.out.println(length); // will return 6

  int arr2[] = new int[10];
   arr2[3] = 4;
  int length2 =arr2.length;
  System.out.println(length2); // // will return 10. all other digits will be 0 initialize because staic memory initialization
alok
quelle
1

Es enthält die tatsächliche Größe des Arrays, da Sie das Array so initialisiert haben, als Sie es deklariert haben. Java hat kein Konzept für die "logische" Größe eines Arrays. Für ihn ist der Standardwert 0 genauso logisch wie die manuell festgelegten Werte.

Turix
quelle
1

Es enthält die zugewiesene Größe 10. Die verbleibenden Indizes enthalten den Standardwert 0.

Nikhil Kumar
quelle
1

Wenn Sie die logische Größe des Arrays möchten, können Sie alle Werte im Array durchlaufen und gegen Null prüfen. Erhöhen Sie den Wert, wenn er nicht Null ist, und das wäre die logische Größe. Da die Arraygröße fest ist, haben Sie keine eingebaute Methode. Vielleicht sollten Sie sich Sammlungen ansehen.

Struse
quelle
Dies ist nur eine Größe "Ich nehme an, 0 ist kein gültiger Wert" und ob dies hilfreich ist, ist etwas zweifelhaft.
Tom
Ich hatte gerade die Idee, die Länge des Arrays zu ermitteln (Nullen sind ungültig). Wie gesagt, Sie können Sammlungen für eine genauere Datenmanipulation verwenden.
Struse
1

Es sollte sein:

int a = arr.length;

Klammern sollten vermieden werden.

Godlu
quelle
5
Willkommen beim Stapelüberlauf! Da dies eine Frage ist, die weit über ein Jahr alt ist und bereits sechs weitere Antworten hat, würde ich eine lange Antwort erwarten. Darüber hinaus beantworten Sie nicht den Punkt der Frage - Sie beheben lediglich einen Tippfehler, der bereits in einer Antwort (die die Frage beantwortet) und einem Fragekommentar angesprochen wurde .
John Dvorak
0

Java-Arrays haben tatsächlich eine feste Größe, und die anderen Antworten erklären, dass .length nicht wirklich das tut, was Sie erwarten. Ich möchte nur hinzufügen, dass angesichts Ihrer Frage eine ArrayList verwendet werden soll, dh ein Array, das wachsen und schrumpfen kann:

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

Hier zeigt Ihnen die .size () -Methode die Anzahl der Elemente in Ihrer Liste an, und Sie können diese erweitern, wenn Sie Dinge hinzufügen.

Draxil
quelle
0

Wenn Sie mit "logische Größe" den Index des Arrays meinen, dann ist einfach int arrayLength = arr.length-1; Da der Array-Index mit "0" beginnt, ist der logische oder "Array-Index" immer um "eins" kleiner als die tatsächliche Größe.

Salah
quelle
0

Arrays wird zur Kompilierungszeit in Java Speicher zugewiesen. Sie sind also statisch. Die nicht explizit festgelegten oder geänderten Elemente werden mit den Standardwerten festgelegt. Sie könnten Code wie diesen verwenden, obwohl dies nicht empfohlen wird, da er keine Standardwerte zählt. Selbst wenn Sie diese explizit auf diese Weise initialisieren, kann dies zu Fehlern auf der ganzen Linie führen. Wie bereits erwähnt, muss bei der Suche nach der tatsächlichen Größe ".length" anstelle von ".length ()" verwendet werden.

public int logicalArrayLength(type[] passedArray) {
    int count = 0;
    for (int i = 0; i < passedArray.length; i++) {
        if (passedArray[i] != defaultValue) {
            count++;
        }
    }
    return count;
}
Poobean
quelle