2024.06.28

配列の要素数を増やす

はじめに

ここでは、ArrayListクラス/Vectorクラス/LinkedListクラスを使わずに、配列要素数を動的に増やす方法を説明します。

配列の要素数は動的に増やせるか?

配列要素数を動的に増やすことはできません。

一度決定した要素数は変更することができないので、増やすことも、減らすこともできません。

配列の要素数を増やす方法

では、どうやって要素数を増やすのか?

配列要素数は変更できないので、要素数を増やした新しい配列を作成し、その配列に元の配列の値をコピーすることで配列要素数が増えたことにします。

例えば、要素数10のint型配列aryの要素数を11に増やす場合、aryの要素数に1を足した要素数int型配列newaryを作成します。

	int[] ary = new int[ 10 ];
		:
	int[] newary = new int[ ary.length + 1 ];

新しく作成した配列newaryに配列aryの値をコピーして、「ary = newaryn;」とすれば配列aryの要素数が1つ増えます。

	for ( int i = 0; i < ary.length; i++ )
		newary[ i ] = ary[ i ];

	ary = newary;

ただし、この方法を頻繁に行ったり、要素数が多い場合は処理効率が悪くなります。

元の配列要素数に1を足した配列を新しく作成することでメモリーを消費し、さらに元の配列の値を新しい配列にコピーする必要があるからです。

この方法は、配列要素数が少なくて、要素数の変更回数が少ない場合に使用することをお勧めします。

Javaソースコード

要素数0のint型配列に、要素数を1つずつ増やしながら整数値を挿入していくJavaソースコードです。

IncArray.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
public class IncArray {
	// 配列の要素数を1つ増やす
	private static int[] incrementArray( int[] ary, int value )
	{
		// 配列aryの要素数に1を足した要素数でnewaryを作成
		int[] newary = new int[ ary.length + 1 ];

		// 配列aryを配列newaryにコピー
		for ( int i = 0; i < ary.length; i++ )
			newary[ i ] = ary[ i ];

		// 配列newaryの最後の要素にvalueを格納
		newary[ newary.length - 1 ] = value;

		// 新しく作成したnewaryを戻す
		return newary;
	}


	// メイン 
	public static void main( String[] args ) {
		// 要素数0の配列aryを作成
		int[] ary = new int[ 0 ];

		// 配列aryに1を追加
		ary =incrementArray( ary, 1 );

		// 配列aryに2を追加
		ary =incrementArray( ary, 2 );

		// 配列aryに3を追加
		ary =incrementArray( ary, 3 );

		// 配列aryに4を追加
		ary =incrementArray( ary, 4 );

		// 配列aryに5を追加
		ary =incrementArray( ary, 5 );

		// 配列の要素数を出力
		System.out.println( "要素数:" + ary.length );

		// 配列の値を出力
		for ( int i = 0; i < ary.length; i++ )
			System.out.println( ary[ i ] );
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis IncArray.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac IncArray.java

実行

C:\talavax\javasample>java IncArray

実行結果

要素数:5
1
2
3
4
5

要素数0の配列aryに、1から5の値が挿入できていることが確認できます。

Javaソースコードの解説

ここから、ソースコードを解説していきます。

001
public class IncArray {

クラス名を、IncArrayとしています。

002
003
004
	// 配列の要素数を1つ増やす
	private static int[] incrementArray( int[] ary, int value )
	{

配列aryの最後に、整数値valueを追加するincrementArrayメソッドです。

005
006
		// 配列aryの要素数に1を足した要素数でnewaryを作成
		int[] newary = new int[ ary.length + 1 ];

配列aryの要素数に1を足した要素数の新しい配列newaryを作成しています。

008
009
010
		// 配列aryを配列newaryにコピー
		for ( int i = 0; i < ary.length; i++ )
			newary[ i ] = ary[ i ];

配列aryの値を、配列newaryにコピーしています。

この時点で、配列newaryの最後の要素newary[ newary.length - 1 ]にはint型の初期値0が格納されています。

012
013
		// 配列newaryの最後の要素にvalueを格納
		newary[ newary.length - 1 ] = value;

配列newaryの最後の要素newary[ newary.length - 1 ]にvalueを代入しています。

015
016
		// 新しく作成したnewaryを戻す
		return newary;

新しく作成した配列newaryをreturn文で戻しています。

020
021
	// メイン 
	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

022
023
		// 要素数0の配列aryを作成
		int[] ary = new int[ 0 ];

要素数0のint型配列aryを作成しています。

025
026
		// 配列aryに1を追加
		ary =incrementArray( ary, 1 );

incrementArrayメソッド配列aryと追加する値1を渡しています。

戻り値をaryに代入することで、要素数が1つ増えた配列aryになります。この時点で配列aryの要素数ary.lengthは1です。

ary[ ary.length - 1 ]には1が格納されています。

028
029
030
031
032
033
034
035
036
037
038
		// 配列aryに2を追加
		ary =incrementArray( ary, 2 );

		// 配列aryに3を追加
		ary =incrementArray( ary, 3 );

		// 配列aryに4を追加
		ary =incrementArray( ary, 4 );

		// 配列aryに5を追加
		ary =incrementArray( ary, 5 );

上記と同様に、incrementArrayメソッド配列aryと追加する値2から5を渡しています。

040
041
		// 配列の要素数を出力
		System.out.println( "要素数:" + ary.length );
043
044
045
		// 配列の値を出力
		for ( int i = 0; i < ary.length; i++ )
			System.out.println( ary[ i ] );

for文を使って配列aryの全ての要素を、printlnメソッドコンソール出力しています。

以上です。

関連コンテンツ

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

配列をそのままコピーするメソッドの作り方をソースコードを使って詳しく解説しています。

2019.01.03

メソッドを抜けるときに使用するreturn文について説明しています。

2020.03.20

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

プログラミングで使う変数って何?

2020.03.23

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

コンピュータは、いくつかの装置から構成されています。その主な5つの装置(機能)って何?

2022.07.10

プログラミング言語とは?種類や特徴について説明しています。

2022.08.03

自然数と整数って何が違う?

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

「ゆるゆるプログラム」のコンテンツを紹介しています。興味のある方はこの記事をご覧ください。

2020.03.23

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

Javaを使った簡単な応用プログラム(生年月日から年齢を計算プログラムなど)を紹介しています。

2022.07.07

Swingパッケージを使ってグラフィック表示を行う方法を解説しています。

2020.03.23

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

三角形、台形、円などいろいろな図形の面積を計算するプログラムを紹介しています。詳しくは、記事をご覧ください。

2021.05.18

配列を使うJavaソースコードを多数紹介しています。

2021.05.18

繰り返し処理を使ったJavaのソースコードサンプルを紹介しています。

2020.03.23

数学に関係するJavaのメソッドやソースコードなどを紹介しています。

2022.10.25

StringクラスとStringBuilderクラスを利用したプログラミングの仕方を紹介しています。

2016.12.16

日本で使われてきた伝統文様「和柄」について解説しています。

2022.07.27

プログラミング、ITに関する用語をまとめています。

2022.10.17

広告