Javaで配列を宣言して初期化するにはどうすればよいですか?

2009年07月29日に質問されました。  ·  閲覧回数 4.7M回  ·  ソース

bestattendance picture
2009年07月29日

Javaで配列を宣言して初期化するにはどうすればよいですか?

回答

glmxndr picture
2009年07月29日
2778

配列宣言または配列リテラルのいずれかを使用できます(ただし、変数を宣言してすぐに影響を与える場合にのみ、配列リテラルを使用して配列を再割り当てすることはできません)。

プリミティブ型の場合:

int[] myIntArray = new int[3];
int[] myIntArray = {1, 2, 3};
int[] myIntArray = new int[]{1, 2, 3};

// Since Java 8. Doc of IntStream: https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

int [] myIntArray = IntStream.range(0, 100).toArray(); // From 0 to 99
int [] myIntArray = IntStream.rangeClosed(0, 100).toArray(); // From 0 to 100
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).toArray(); // The order is preserved.
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).sorted().toArray(); // Sort 

Stringなどのクラスの場合、同じです。

String[] myStringArray = new String[3];
String[] myStringArray = {"a", "b", "c"};
String[] myStringArray = new String[]{"a", "b", "c"};

初期化の3番目の方法は、最初に配列を宣言してから初期化するときに役立ちます。 ここではキャストが必要です。

String[] myStringArray;
myStringArray = new String[]{"a", "b", "c"};
Isabella Engineer picture
2013年07月10日
290

配列には2つのタイプがあります。

一次元配列

デフォルト値の構文:

int[] num = new int[5];

または(あまり好ましくない)

int num[] = new int[5];

指定された値を持つ構文(変数/フィールドの初期化):

int[] num = {1,2,3,4,5};

または(あまり好ましくない)

int num[] = {1, 2, 3, 4, 5};

注:便宜上、int [] numは、ここで配列について話していることを明確に示しているため、推奨されます。 それ以外は違いはありません。 どういたしまして。

多次元配列

宣言

int[][] num = new int[5][2];

または

int num[][] = new int[5][2];

または

int[] num[] = new int[5][2];

初期化

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

または

 int[][] num={ {1,2}, {1,2}, {1,2}, {1,2}, {1,2} };

不規則配列(または非長方形配列)

 int[][] num = new int[5][];
 num[0] = new int[1];
 num[1] = new int[5];
 num[2] = new int[2];
 num[3] = new int[3];

したがって、ここでは列を明示的に定義しています。
別の方法:

int[][] num={ {1}, {1,2}, {1,2,3,4,5}, {1,2}, {1,2,3} };

アクセス用:

for (int i=0; i<(num.length); i++ ) {
    for (int j=0;j<num[i].length;j++)
        System.out.println(num[i][j]);
}

または:

for (int[] a : num) {
  for (int i : a) {
    System.out.println(i);
  }
}

不規則配列は多次元配列です。
説明については、公式Javaチュートリアルで多次元配列の詳細を参照し

Nate picture
2009年07月29日
130
Type[] variableName = new Type[capacity];

Type[] variableName = {comma-delimited values};



Type variableName[] = new Type[capacity]; 

Type variableName[] = {comma-delimited values};

も有効ですが、変数の型が実際には配列であることがわかりやすいため、型の後に角かっこを付けることをお勧めします。

Anirudh picture
2009年07月29日
40

Javaで配列を宣言する方法はいくつかあります。

float floatArray[]; // Initialize later
int[] integerArray = new int[10];
String[] array = new String[] {"a", "b"};

詳細については、 SunチュートリアルサイトとJavaDocを参照してください

Chet picture
2009年07月29日
32

それぞれの部分を理解しておくと役に立ちます。

Type[] name = new Type[5];

Type[]は、nameと呼ばれる変数タイプです(「name」は識別子と呼ばれType[][] (Type []の配列型)のような多次元配列を作成できます。 キーワードnewは、新しいアレイにメモリを割り当てることを示しています。 括弧内の数字は、新しいアレイのサイズと割り当てるメモリの量を示しています。 たとえば、Javaが基本型Typeが32バイトを取ることを知っていて、サイズ5の配列が必要な場合、内部で32 * 5 = 160バイトを割り当てる必要があります。

次のような、すでにそこにある値を使用して配列を作成することもできます。

int[] name = {1, 2, 3, 4, 5};

これは、空のスペースを作成するだけでなく、それらの値で埋めます。 Javaは、プリミティブが整数であり、それらが5つあることを認識できるため、配列のサイズを暗黙的に決定できます。

Amit Bhandari picture
2013年06月04日
31

以下に配列の宣言を示しますが、配列は初期化されていません。

 int[] myIntArray = new int[3];

以下に、配列の宣言と初期化を示します。

int[] myIntArray = {1,2,3};

ここで、以下は、配列の宣言と初期化も示しています。

int[] myIntArray = new int[]{1,2,3};

ただし、この3つ目は、参照変数「myIntArray」が指す匿名の配列オブジェクト作成のプロパティを示しているため、「new int [] {1,2,3};」とだけ記述します。 次に、これが匿名の配列オブジェクトを作成する方法です。

私たちが書くだけなら:

int[] myIntArray;

これは配列の宣言ではありませんが、次のステートメントで上記の宣言を完了します。

myIntArray=new int[3];
Thomas Owens picture
2009年07月29日
27

または、

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

これは、サイズ10のarrayNameという配列を宣言します(使用する要素0から9があります)。

Dave picture
2009年07月29日
26

また、より動的なものが必要な場合は、リストインターフェイスがあります。 これはうまく機能しませんが、より柔軟性があります。

List<String> listOfString = new ArrayList<String>();

listOfString.add("foo");
listOfString.add("bar");

String value = listOfString.get(0);
assertEquals( value, "foo" );
codecubed picture
2016年01月29日
15

配列を作成するには、主に2つの方法があります。

これは、空の配列の場合:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

そしてこれは、初期化された配列の場合:

int[] array = {1,2,3,4 ...};

次のように、多次元配列を作成することもできます。

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};
HyperNeutrino picture
2015年05月24日
11

プリミティブ型intを例にint配列を宣言する方法はいくつかあります。

int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};

これらすべてで、 int i[]代わりにint[] i int i[]使用できます。

リフレクションを使用すると、 (Type[]) Array.newInstance(Type.class, capacity);使用できます

メソッドパラメータでは、 ...variable arguments示すことに注意してください。 基本的に、任意の数のパラメーターで問題ありません。 コードで説明する方が簡単です。

public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};

メソッド内では、 varargsは通常のint[]として扱われます。 Type...はメソッドパラメータでのみ使用できるため、 int... i = new int[] {}はコンパイルされません。

int[]をメソッド(または他のType[] )に渡す場合、3番目の方法は使用できないことに注意してください。 ステートメントint[] i = *{a, b, c, d, etc}*で、コンパイラーは{...}int[]意味すると想定します。 しかし、それはあなたが変数を宣言しているからです。 配列をメソッドに渡す場合、宣言はnew Type[capacity]またはnew Type[] {...}いずれかである必要があります。

多次元配列

多次元配列は扱いがはるかに困難です。 基本的に、2D配列は配列の配列です。 int[][]は、 int[]の配列を意味します。 重要なのは、 int[][]int[x][y]として宣言されている場合、最大インデックスはi[x-1][y-1]です。 基本的に、長方形のint[3][5]は次のとおりです。

[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]