2024.06.28
配列の要素数を増やす
はじめに
配列の要素数は動的に増やせるか?
配列の要素数を増やす方法
int[] ary = new int[ 10 ]; : int[] newary = new int[ ary.length + 1 ];
for ( int i = 0; i < ary.length; i++ ) newary[ i ] = ary[ i ]; ary = newary;
ただし、この方法を頻繁に行ったり、要素数が多い場合は処理効率が悪くなります。
元の配列の要素数に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
Javaソースコードの解説
ここから、ソースコードを解説していきます。
001
public class IncArray {
クラス名を、IncArrayとしています。
002 003 004
// 配列の要素数を1つ増やす private static int[] incrementArray( int[] ary, int value ) {
005 006
// 配列aryの要素数に1を足した要素数でnewaryを作成 int[] newary = new int[ ary.length + 1 ];
008 009 010
// 配列aryを配列newaryにコピー for ( int i = 0; i < ary.length; i++ ) newary[ i ] = ary[ i ];
012 013
// 配列newaryの最後の要素にvalueを格納
newary[ newary.length - 1 ] = value;
配列newaryの最後の要素newary[ newary.length - 1 ]にvalueを代入しています。
015 016
// 新しく作成したnewaryを戻す return newary;
020 021
// メイン public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
022 023
// 要素数0の配列aryを作成 int[] ary = new int[ 0 ];
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 );
040 041
// 配列の要素数を出力 System.out.println( "要素数:" + ary.length );
配列aryの要素数を、printlnメソッドでコンソール出力しています。
043 044 045
// 配列の値を出力 for ( int i = 0; i < ary.length; i++ ) System.out.println( ary[ i ] );
for文を使って配列aryの全ての要素を、printlnメソッドでコンソール出力しています。
以上です。