Java String Array: Gibt es eine Methodengröße?

152

Ich komme aus einem PHP-Hintergrund und in PHP gibt es eine array_size()Funktion, die Ihnen sagt, wie viele Elemente im Array verwendet werden.

Gibt es eine ähnliche Methode für ein String[]Array? Vielen Dank.

phill
quelle
3
Heh, alle Antworten waren innerhalb derselben Minute.
jjnguy
1
Ah, PHP mit seinem überfüllten globalen Namespace. Die guten alten Zeiten ...
Kevinji
2
Ich denke, er meint PHPs count () nicht array_size ()
Joshua Burns

Antworten:

277

Ja .length(eigenschaftsähnlich, keine Methode):

String[] array = new String[10];
int size = array.length;
Kris
quelle
2
Hallo, wie können wir die Dokumente finden, in denen alle möglichen Eigenschaften und Funktionen des Array-Objekts aufgeführt sind? Ich meine nicht das Arrays-Objekt, das die einzigen Dokumente sind, die ich finden kann.
GMsoF
1
@GMsoF Die Dokumentation für "[]" (Array, nicht Arrays-Objekt) ist eigentlich die Java-Spezifikation. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Bearbeiten: Ah ... der Kommentar ist von 2013 ...
Acapulco
44
array.length

Es ist eigentlich ein letztes Mitglied des Arrays, keine Methode.

jjnguy
quelle
2
IIRC, es ist eigentlich kein Feld, es sieht nur so aus.
Tom Hawtin - Tackline
Oh, was ist es dann? Eine spezielle Array-Sache?
jjnguy
3
ein "Pseudofeld", das zu einem Op-Code mit spezieller Array-Länge kompiliert wird, anstatt zu dem Op-Code für den Feldzugriff.
Pete Kirkham
2
Es ist ein Feld gemäß §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "Die öffentliche endgültige Feldlänge, die die Anzahl der Komponenten des Arrays enthält ( Länge kann positiv oder Null sein). "
Michael Myers
19

Es ist wahrscheinlich auch nützlich zu beachten, dass Sie bei einem mehrdimensionalen Array die entsprechende Dimension erhalten können, indem Sie einfach ein '[0]' an das Array anhängen, das Sie abfragen, bis Sie zur entsprechenden Achse / Tupel / Dimension gelangen.

Dies wird wahrscheinlich besser mit dem folgenden Code erklärt:

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
    }

}

Welches erzeugt die Ausgabe:

5
12
Liang
quelle
15

array.length final property

es ist öffentliches und endgültiges Eigentum. Es ist endgültig, da Arrays in Java nach Größe unveränderlich sind (aber nach Elementwert veränderbar sind).

dfa
quelle
14

Arrays sind Objekte und haben ein Längenfeld.

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

haha.length wäre 2

willcodejavaforfood
quelle
Nur um nicht zu picken. Aber ich glaube, Arrays sind KEINE Objekte in Java - sie sind einer der beiden Referenztypen von Variablen. Das andere sind Objekte.
Jabbie
2
@ Jabbie: Wirklich? Haben Sie eine Referenz dafür? Ich frage es nur, weil Sie Objekt o = neuer String [] {"Hallo"} sagen können;
Simon Nickerson
Simon Ich denke, der Grund, warum Anweisung funktioniert, ist, dass sie die reflexiven Klassen für alle primitiven Typen eingeführt haben.
Brian Sweeney
9
Lesen Sie den ersten Satz von docs.oracle.com/javase/specs/jls/se8/html/jls-10.html und sagen Sie uns dann, dass Arrays keine Objekte sind. ;)
Michael Myers
1
Sie hätten einen anderen Variablennamen verwenden können, der mich so ablenkt
Space Rocker
11

In Java gibt es ein lengthFeld, das Sie für jedes Array verwenden können, um die Größe zu ermitteln:

    String[] s = new String[10];
    System.out.println(s.length);
bruno conde
quelle
1
Vielen Dank, dass Sie sich nicht mit technischen Fragen befasst haben, was es sein könnte oder nicht, und einfach eine kurze und präzise Antwort geben. +1 für dich. :)
Joshua Burns
9

Wenn Sie möchten, dass eine Funktion dies tut

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

Dies kann nützlich sein, wenn Sie nicht wissen, welchen Array-Typ Sie haben, z. B. int [], byte [] oder Object [].

Peter Lawrey
quelle
6

Es gibt einen Unterschied zwischen Länge Stringund arrayzu verdeutlichen:

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
quelle
Dies sollte in der Frage aktualisiert werden, wenn es sich um eine Klarstellung handelt.
Whitecat
5

Die Antwort lautet "Alle". Ein Java-Array wird mit einer festen Anzahl von Element-Slots zugewiesen. Das Attribut "Länge" gibt an, wie viele. Diese Zahl ist für die Lebensdauer des Arrays unveränderlich. Für ein Größenänderungsäquivalent benötigen Sie eine der Klassen java.util.List. Hier können Sie mithilfe der size () -Methode herausfinden, wie viele Elemente verwendet werden.

Es gibt jedoch "In Verwendung" und dann gibt es In Verwendung . In einem Klassenobjektarray können Sie Element-Slots haben, deren Elemente Nullobjekte sind. Obwohl sie im Längenattribut zählen, aber die Definitionen der meisten Personen, werden sie nicht verwendet (YMMV, abhängig von der Anwendung). Es gibt keine integrierte Funktion zum Zurückgeben der Null- / Nicht-Null-Zählungen.

Listenobjekte haben noch eine andere Definition von "In Verwendung". Um eine übermäßige Erstellung / Zerstörung der zugrunde liegenden Speicherstrukturen zu vermeiden, werden diese Klassen normalerweise aufgefüllt. Es wird intern verwendet, aber in der zurückgegebenen size () -Methode nicht gezählt. Wenn Sie versuchen, auf diese Elemente zuzugreifen, ohne die Liste zu erweitern (über die Add-Methoden), wird eine unzulässige Indexausnahme angezeigt.

Für Listen können Sie also "In Verwendung" für nicht null, festgeschriebene Elemente, alle festgeschriebenen Elemente (einschließlich null Elemente) oder alle Elemente einschließlich des derzeit zugewiesenen Erweiterungsbereichs verwenden.

Tim H.
quelle
2

Alle obigen Antworten sind richtig. Es ist wichtig zu beachten, dass Arrays ein Längenattribut haben, jedoch keine Längenmethode. Wann immer Sie in Java Strings und Arrays verwenden, sind die drei Grundmodelle, denen Sie möglicherweise gegenüberstehen:

  1. String s = neuer String ("vidyasagar");
    System.out.println (s.length ()); // In diesem Fall verwenden wir nur String. Kein Längenattribut für Strings. Wir müssen die Methode length () verwenden.
  2. int [] s = new int [10]; System.out.println (Länge); // hier verwenden wir das Längenattribut von Arrays.
  3. String [] s = neuer String [10];
    System.out.println (Länge); // Obwohl der Datentyp String ist, handelt es sich hier nicht um einen einzelnen String. s ist eine Referenz für ein Array von Strings. Daher verwenden wir das Längenattribut von Arrays, um auszudrücken, wie viele Zeichenfolgen in dieses Array passen können.
vidyasagar
quelle
1

Nicht wirklich die Antwort auf Ihre Frage, aber wenn Sie so etwas wie ein Array haben möchten, das wachsen und schrumpfen kann, sollten Sie kein Array in Java verwenden. Am besten verwenden Sie ArrayList oder eine andere List-Implementierung.

Sie können dann size () aufrufen, um die Größe zu ermitteln.

Simon Groenewolt
quelle