Wie kann ich die Größe eines Arrays, einer Collection oder eines Strings in Java ermitteln?

Wie kann ich auf die Länge eines Arrays, einer Sammlung ( List , Set usw.) und eines String Objekts zugreifen? Warum ist das anders?

Gekürzt:

Für ein Array: Verwenden Sie .length .

Für eine Collection (oder Map ): Verwenden Sie .size() .

Für eine CharSequence (die CharBuffer , Segment , String , StringBuffer und StringBuilder ): Verwenden Sie .length() .


Arrays

Man würde die Eigenschaft .length für ein Array verwenden, um darauf zuzugreifen. Obwohl ein Array ein dynamisch erstelltes Object , wird das Mandat für die Eigenschaft length durch die Java Language Specification, §10.3 definiert :

Ein Array wird durch einen Array-Erstellungsausdruck (§15.10) oder einen Array-Initialisierer (§10.6) erstellt .

Ein Array-Erstellungsausdruck gibt den Elementtyp, die Anzahl der Ebenen verschachtelter Arrays und die Länge des Arrays für mindestens eine Verschachtelungsebene an. Die Länge des Arrays ist als endgültige length Instanzvariable verfügbar.

Ein Array-Initialisierer erstellt ein Array und stellt Anfangswerte für alle seine Komponenten bereit.

Da sich die Länge eines Arrays ohne die Erstellung einer neuen Array-Instanz nicht ändern kann, ändern wiederholte Zugriffe von .length den Wert nicht , unabhängig davon, was mit der Array-Instanz geschieht (es sei denn, die Referenz wird durch ein Array mit einer anderen Größe ersetzt).

Um beispielsweise die Länge eines deklarierten eindimensionalen Arrays zu erhalten, würde man folgendes schreiben:

 double[] testScores = new double[] {100.0, 97.3, 88.3, 79.9}; System.out.println(testScores.length); // prints 4 

Um Längen in einem n- dimensionalen Array zu erhalten, muss berücksichtigt werden, dass sie jeweils auf eine Dimension des Arrays zugreifen.

Hier ist ein Beispiel für ein zweidimensionales Array.

 int[][] matrix = new int[][] { {1, 2, 3, 4}, {-1, 2, -3, 4}, {1, -2, 3, -4} }; System.out.println(matrix.length); // prints 3 (row length or the length of the array that holds the other arrays) System.out.println(matrix[0].length); // prints 4 (column length or the length of the array at the index 0) 

Dies ist wichtig, insbesondere im Fall von gezackten Arrays ; Die Spalten oder Zeilen stehen möglicherweise nicht immer hintereinander.

Sammlungen ( Set , List usw.)

Für jedes Objekt, das die Collection Schnittstelle implementiert, verfügen sie über eine Methode namens size() mit der auf die Gesamtgröße der Auflistung zugegriffen werden kann.

Im Gegensatz zu Arrays haben Sammlungen keine feste Länge und können jederzeit Elemente hinzufügen oder entfernen. Ein Aufruf von size() führt nur dann zu einem Ergebnis ungleich Null, wenn der Liste etwas hinzugefügt wurde.

Beispiel:

 List shoppingList = new ArrayList<>(); shoppingList.add("Eggs"); System.out.println(shoppingList.size()); // prints 1 

Bestimmte Sammlungen können das Hinzufügen eines Elements verweigern, entweder weil es null ist oder wenn es sich um ein Duplikat handelt (im Falle eines Set ). In diesem Fall wird die Größe durch wiederholte Hinzufügungen nicht erhöht.

Beispiel:

 Set uniqueShoppingList = new HashSet<>(); uniqueShoppingList.add("Milk"); System.out.println(uniqueShoppingList.size()); // prints 1 uniqueShoppingList.add("Milk"); System.out.println(uniqueShoppingList.size()); // prints 1 

Der Zugriff auf die Größe einer List> * erfolgt ähnlich wie bei einem gezackten Array:

 List> oddCollection = new ArrayList<>(); List numbers = new ArrayList() {{ add(1); add(2); add(3); }}; oddCollection.add(numbers); System.out.println(oddCollection.size()); // prints 1 System.out.println(oddCollection.get(0).size()); // prints 3 

*: In der Collection ist die get Methode in ihrer Schnittstelle nicht definiert.

Nebenbei, eine Map ist keine Collection , aber es ist auch eine size() -Methode definiert. Dies gibt einfach die Anzahl der in der Map enthaltenen Schlüssel / Wert-Paare zurück.

String

Ein String hat eine Methodenlänge length() definiert. Es druckt die Anzahl der Zeichen, die in dieser Instanz der Zeichenfolge vorhanden sind.

Beispiel:

 System.out.println("alphabet".length()); // prints 8 

Vergessen Sie nicht, CollectionUtils.size() aus der Commons-Bibliothek , seine Null-Safe, so dass Sie nicht vorher Null überprüfen müssen.