web-dev-qa-db-ja.com

Java)での可変サイズ配列の初期化

Javaには、次のように初期化される整数の配列があります。

public int MyNumbers[] = {0,0,0,0};

ただし、配列を可変長のゼロ数に初期化したいと思います。

private int number_of_elements = 4;
public int MyNumbers[] = {0} * number_of_elements; // ????

Java Cから来たのでこれを初めて行う方法がわかりません。何か提案はありますか?

[〜#〜]編集[〜#〜]

forループを使用できることは知っていますが、それを行う簡単な方法があることを望んでいます。

15
daveslab
int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);

http://Java.Sun.com/j2se/1.5.0/docs/api/Java/util/Arrays.html を参照してください。

32
laginimaineb
int[] MyNumbers = new int[number_of_elements];
6
Trevor Harrison

または、 ArrayList を使用して、事前にサイズを気にする必要がないようにすることもできます。必要に応じて内部配列を動的に拡張します。

List<Integer> numbers = new ArrayList<Integer>();
numbers.add(0);
numbers.add(2);
// ...

チュートリアルはこちらArrayListが含まれているCollectionsAPIの詳細をご覧ください。

5
BalusC
int[] MyNumbers = new int[number_of_elements];

これはintの配列であるため、配列要素は0のJavaのintのデフォルト値を自動的に取得します。

これがIntegerオブジェクトの配列である場合、オブジェクト参照のデフォルト値はnullであるため、配列を作成した後に配列を埋める必要があります。 Object配列にデフォルト値を設定するには、次のようにします。

Integer[] MyNumbers = new Integer[number_of_elements];
Java.util.Arrays.fill(MyNumbers, new Integer(0));

もちろん、同じ手法を使用して、int配列をゼロ以外の値に初期化することもできます。

int[] MyNumbers = new int[number_of_elements];
Java.util.Arrays.fill(MyNumbers, 1);
2
Tendayi Mawushe

CのMemsetに似たものを探しているなら、私はそれがないと思います。 Javadocを見ると、Arrays.fillの実装はforループと同じように見えます。

しかし、同じ質問について説明しているこの記事に出くわしました http://www.searchenginecaffe.com/2007/03/how-to-quickly-reset-value-of-Java.html 表示されますsystem.arraycopyを使用することがより良い解決策であり、これが使用できる関数です(リンクからコピー)

public static void bytefill(byte[] array, byte value) {
 int len = array.length;
 if (len > 0)
 array[0] = value;
  for (int i = 1; i < len; i += i) {
    System.arraycopy( array, 0, array, i, ((len - i) < i) ? (len - i) : i);
 }
}
0
Jimmy Tsai