Java String配列:メソッドのサイズはありますか?


152

私はphpのバックグラウンドから来ており、phpにはarray_size()、配列内の使用されている要素の数を通知する関数があります。

String[]配列に同様の方法はありますか?ありがとう。


3
へー、すべての答えは同じ分以内でした。
jjnguy 2009年

1
ああ、乱雑なグローバル名前空間を持つPHP。古き良き時代...
ケヴィンジ

2
私は彼がarray_size()ではなくphpのcount()を意味すると思います
Joshua Burns

回答:


277

はい、.length(プロパティではなく、メソッドのように):

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

2
こんにちは、配列オブジェクトのすべての可能なプロパティと関数をリストするドキュメントをどのように見つけられますか 私が見つけることができる唯一のドキュメントであるArraysオブジェクトを意味するのではありません。
GMsoF 2013年

1
@GMsoF "[]"(Arraysオブジェクトではなく配列)のドキュメントは、実際にはJava仕様です。.eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Edit:Ah ...コメントは2013年のものです...
Acapulco

44
array.length

これは実際には配列の最後のメンバーであり、メソッドではありません。


2
IIRC、実際にはフィールドではなく、フィールドのように見えます。
トム・ホーティン-タックライン2009年

ああ、それは何ですか?いくつかの特別な配列のこと?
jjnguy 2009年

3
フィールドアクセスオペコードではなく、特別な配列長のオペコードにコンパイルされる「疑似フィールド」。
ピートカーカム

2
これは、§10.7(java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7)に準拠したフィールドです。「配列のコンポーネントの数を含むパブリックの最終フィールド長(長さは正またはゼロの場合があります。」
マイケルマイヤーズ

19

また、多次元配列がある場合、適切な軸/タプル/次元に到達するまで、クエリしている配列に '[0]'を追加するだけで、それぞれの次元を取得できることに注意してください。

これはおそらく次のコードでよりよく説明されます:

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
    }

}

これは出力を生成します:

5
12

15

array.length最終プロパティ

それは公共の最終財産です。Javaの配列はサイズによって不変です(ただし、要素の値によって変更可能です)。


14

配列はオブジェクトであり、長さフィールドがあります。

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

haha.lengthは2になります


ちょっとひねって。しかし、配列はJavaのオブジェクトではないと思います。これらは、2つの参照型の変数の1つです。他はオブジェクトです。
ジャビー09年

2
@jabbie:本当に?そのためのリファレンスはありますか?Object o = new String [] {"hello"};と言えるので、質問します。
Simon Nickerson、

サイモン私はステートメントが機能する理由は、それらがすべてのプリミティブ型の再帰クラスを導入したためだと思います。
ブライアンスウィーニー、

9
docs.oracle.com/javase/specs/jls/se8/html/jls-10.htmlの最初の文を読んでから、配列はオブジェクトではないことを教えてください。;)
マイケルマイヤーズ

1
他の変数名を使用することもできますが、それは私にとって非常に煩わしいものです
Space Rocker

11

Java lengthでは、任意の配列でそのサイズを確認するために使用できるフィールドがあります。

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

1
それが何であるか、またはそうでないかもしれないかについての専門知識に触れず、単純で簡潔な答えを提供してくれてありがとう。+1してください。:)
ジョシュアバーンズ

9

関数でこれを実行したい場合

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

これは、int []、byte []、Object []など、どのタイプの配列を持っているかわからない場合に役立ちます。


6

Stringarrayを明確にするために、長さには違いがあります。

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

これが明確である場合は、質問で更新する必要があります。
Whitecat

5

答えは「すべて」です。Java配列は、固定数の要素スロットで割り当てられます。「長さ」属性は、その数を示します。その数は、配列の存続期間中は不変です。サイズ変更可能な同等のものには、java.util.Listクラスの1つが必要です。ここで、size()メソッドを使用して、使用されている要素の数を確認できます。

ただし、「使用中」と「使用中」があります。クラスオブジェクト配列では、要素がnullオブジェクトである要素スロットを使用できます。そのため、それらは長さ属性でカウントされますが、ほとんどの人の定義では使用されません(アプリケーションによってはYMMV)。null / null以外のカウントを返す組み込み関数はありません。

リストオブジェクトには、「使用中」の別の定義があります。基礎となるストレージ構造の過度の作成/破壊を回避するために、これらのクラスには通常、いくつかのパディングがあります。内部的に使用されますが、返されるsize()メソッドではカウントされません。また、(addメソッドを使用して)リストを展開せずにこれらのアイテムにアクセスしようとすると、不正なインデックス例外が発生します。

したがって、リストの場合、null以外のコミット済み要素、すべてのコミット済み要素(null要素を含む)、または現在割り当てられている拡張スペースを含むすべての要素を「使用中」にすることができます。


2

上記の答えはすべて適切です。注意すべき重要なことは、配列には長さ属性がありますが、長さメソッドはありません。Javaで文字列と配列を使用する場合は常に、直面する可能性のある3つの基本モデルは次のとおりです。

  1. 文字列s = new String( "vidyasagar");
    System.out.println(s.length()); //この場合、文字列のみを使用しています。文字列の長さ属性はありません。length()メソッドを使用する必要があります。
  2. int [] s = new int [10]; System.out.println(s.length); //ここでは、配列の長さ属性を使用します。
  3. String [] s = new String [10];
    System.out.println(s.length); //ここでは、データタイプは文字列ですが、単一の文字列ではありません。sは文字列の配列の参照です。そのため、配列の長さ属性を使用して、その配列に収まる文字列の数を表します。

1

実際にはあなたの質問に対する答えではありませんが、拡大や縮小が可能な配列のようなものを作りたい場合は、Javaで配列を使用しないでください。おそらく、ArrayListまたは別のList実装を使用するのが最善です

その後、size()を呼び出してサイズを取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.