こんにちは! フリーランスのオータケです。今回はJava言語で配列の扱い方について書いていきたいと思います!
この記事では「配列」についての基本的なことから「配列の操作」など応用的な内容についても紹介していきます。
ただ、Javaは人気プログラミング言語ランキングで安定して上位に食い込む言語ですが、もしあなたが「人気ランキングで上位だからとりあえずJavaを学び始めている」なら一度考え直した方がいいかもしれません。
なぜならJavaは学習難易度が高く、初心者が一人前に仕事ができるようになるには時間がかかるからです。
この記事では、Javaの配列の基礎や応用について解説しつつ、本当にJavaを学ぶべきか?それ以外におすすめの言語などについても解説していきます。
現時点で既に心折れかけている方はこちらのボタンより、Javaを学ぶべきか決められる特徴を読んでみてください。
なお、Javaの記事については、こちらにまとめています。
前提知識:Javaの配列
配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるものです。配列の値は順番に並べられていて、特定の値を取り出したりすることもできます。
例えば、10人のテストの点数をプログラムで保持するためには、int型の変数を10個宣言し格納しなければいけません。
しかし配列を使用すれば、一人一人の点数を格納する変数を宣言しなくても、以下のように一つの配列の宣言だけで全員分の点数を順番に格納することができます。
score = { 50, 30, 70, 80, 90 }
次項ではそんな配列の使い方をくわしく見ていきましょう。
配列の基本
配列の宣言
配列を使用するには、まず配列を宣言します。配列の宣言は以下のように記述します。
書き方:
型名[] 配列変数名;
配列の要素数を指定する場合は、以下のように記述します。
書き方:
型名 配列変数名[] = new 型名[要素数];
例えば、int型の値を3つ格納することのできる配列を宣言するには次のように記述します。
int bar[] = new int[3];
このように配列barは配列の宣言と要素数の指定をまとめて行っています。
配列の要素への値の代入と参照
配列を宣言したら、各要素へ値を代入することができます。配列の各要素は、次のように表すことができます。
書き方:
配列変数名[インデックス]
インデックスとは、配列の何番目かを表す数値です。インデックスは0から始まることに注意してください。
配列の要素へ値を代入するには次のように記述します。
書き方:
配列変数名[インデックス] = 値;
では実際に配列に要素を代入するプログラムを作成していきましょう。「Array01.java」ファイルを作成し、以下のプログラムを記述します。
サンプルプログラム:
public class Array01 { public static void main(String[] args) { int foo[] = new int[3]; foo[0] = 3; foo[1] = 6; foo[2] = 4; System.out.println(foo[0]); System.out.println(foo[1]); System.out.println(foo[2]); } }
ファイルを保存したら、プログラムのコンパイル、実行してみましょう。
javac Array01.java
コンパイルが成功すると、Array01.classが作られます。実行するには、コマンドラインで以下のようにコマンドを実行するとプログラムが処理されます。
$ java Array01 3 6 4
実行結果として3,4,6が出力されたら成功です。
この記事ではJavaの「バージョン8」で動作を確認しています。以降も同じ要領でプログラムを作成、実行していきます。
宣言と同時に値を代入して初期化する方法
配列も変数と同様、宣言と同時に値を代入して初期化することもできます。宣言と同時に初期化するには、次のように記述します。
書き方:
型名 配列変数名[] = {値1, 値2, ... };
宣言と同時に配列を初期化するサンプルです。
サンプルプログラム:
public class Array02 { public static void main(String[] args) { int[] foo = {1, 2, 3, 4, 5}; System.out.println(foo[0]); System.out.println(foo[1]); System.out.println(foo[2]); System.out.println(foo[3]); System.out.println(foo[4]); } }
実行結果:
1 2 3 4 5
また、Arraysクラスのfillメソッドを使って以下のように記述することもできます。
サンプルプログラム:
import java.util.Arrays; public class Array03 { public static void main(String[] args) { int bar[] = new int[5]; Arrays.fill(bar, 3); System.out.println(bar[0]); System.out.println(bar[1]); System.out.println(bar[2]); System.out.println(bar[3]); System.out.println(bar[4]); } }
実行結果:
3 3 3 3 3
詳しい内容についてはこちらのサイトを参考にしてくださいね。
Javaの配列が分かりづらいあなたは・・・
ここまでがJavaの配列の基本なのですが、なんとなく理解できましたでしょうか?
やっぱりJavaび興味がある!このまま学びたいという方はこのあと応用編を解説するので読み進めていけば良いですし、ちょっとイメージできないから他の言語の方がいいかもという方は言語選定をし直すのも良いと思います。
しかしまたあまり考えずに決めると、Javaを安易に選んで他の言語を学び直す現在と同じことが起きるため、今回は「その言語で何が作れるのか・どんな働き方ができるのか・あなたのやりたいこととマッチしてるのか」など総合的に考えて決め直しましょう。
プログラミング言語選定は他の言語の知識や、今何が需要があってこの先どう変化するのかなどIT業界の知識がないといけないため、知識のある弊社コンサルタントと話し合って決めていくのがおすすめです。
無料カウンセリングではあなたのやりたいことや方向性からおすすめの言語や学習プランを提案しておりますので、こちらの記事より体験レッスンの詳細をご覧ください。
配列の応用
lengthで要素数を取得
配列の要素数を取得するには、lengthを使用します。lengthはフィールドやメソッドではなく、配列の特別な構文です。
サンプルプログラム:
public class Array04 { public static void main(String[] args) { int[] foo = new int[10]; System.out.println("配列の要素数:" + foo.length); } }
実行結果:
配列の要素数:10
詳しい内容についてはこちらのサイトを参考にしてくださいね。
System.arraycopyで要素を追加
配列には要素を追加する方法がありません。次のように、要素数を大きくした配列を用意し、Systemクラスのarraycopyメソッドを使って値をコピーします。
サンプルプログラム:
public class Array05 { public static void main(String[] args) { int[] foo = { 5, 3, 6, 8, 2, 5, 9, 2, 4, 1 }; // 元の配列 int[] bar = new int[15]; // データを5個追加したい場合に用意する配列 // 配列barに値をコピー System.arraycopy(foo, 0, bar, 0, 10); // 配列barを表示 for (int i = 0; i < bar.length; i++) { System.out.print(bar[i] + ", "); } } }
実行結果:
5, 3, 6, 8, 2, 5, 9, 2, 4, 1, 0, 0, 0, 0, 0,
詳しい内容についてはこちらのサイトを参考にしてくださいね。
clone、System.arraycopyで要素をコピー
配列の要素をコピーするには、cloneメソッドを使って以下のように記述します。
サンプルプログラム:
public class Array06 { public static void main(String[] args) { int[] foo = { 5, 3, 6, 8, 2, 5, 9, 2, 4, 1 }; // 元の配列 int[] bar = foo.clone(); // 配列barを表示 for (int i = 0; i < bar.length; i++) { System.out.print(bar[i] + ", "); } } }
実行結果:
5, 3, 6, 8, 2, 5, 9, 2, 4, 1,
Systemクラスのarraycopyメソッドを使って以下のように記述することもできます。
サンプルプログラム:
public class Array07 { public static void main(String[] args) { int[] foo = { 5, 3, 6, 8, 2, 5, 9, 2, 4, 1 }; // 元の配列 int[] bar = new int[10]; // コピー先の配列 // 配列barに値をコピー System.arraycopy(foo, 0, bar, 0, 10); // 配列barを表示 for (int i = 0; i < bar.length; i++) { System.out.print(bar[i] + ", "); } } }
実行結果:
5, 3, 6, 8, 2, 5, 9, 2, 4, 1,
Arrays.sortで要素をソート
配列の要素を順番に並び替える場合は、Arraysクラスのsortメソッドを使って以下のように記述します。Arraysクラスはjava.utilパッケージのクラスなので、import文が必要です。
サンプルプログラム:
import java.util.Arrays; public class Array08 { public static void main(String[] args) { int[] foo = {10, 30, 5, 2, 11, 90}; Arrays.sort(foo); // 配列fooを表示 for (int i = 0; i < foo.length; i++) { System.out.print(foo[i] + ", "); } } }
実行結果:
2, 5, 10, 11, 30, 90,
詳しい内容についてはこちらのサイトを参考にしてくださいね。
System.arraycopyで配列を結合
Systemクラスのarraycopyメソッドを使って、連結したい配列の一つ目と連結先にしたい配列の二つ目を新しい配列にコピーして二つの配列を結合します。
サンプルプログラム:
public class Array09 { public static void main(String[] args) { int[] foo = {10, 20, 30}; int[] bar = {5, 15, 25}; int len = foo.length + bar.length; int[] hoge = new int[len]; // まずhogeに先頭からfooの配列をコピーしていく System.arraycopy(foo, 0, hoge, 0, foo.length); // 次にhogeにbarをコピーしていく(コピー開始位置はfoo.lengthとする) System.arraycopy(bar, 0, hoge, foo.length, bar.length); // 配列hogeを表示 for (int i = 0; i < hoge.length; i++) { System.out.print(hoge[i] + ", "); } } }
実行結果:
10, 20, 30, 5, 15, 25,
詳しい内容についてはこちらのサイトを参考にしてくださいね。
Javaをこのまま学ぶべき?メリット・デメリットをおさらい
Javaは誕生して30年経ち様々な企業で使われて求人数や需要も多く、汎用性の高い非常に優れている言語です。
そのため人気ランキングでは上位なのですが、上位だからといって安易に学び始めるのは危険なため特徴をおさらいしていきましょう。
- Java開発に向いてるもの
Javaで作るのに向いているものはアンドロイドアプリや業務システムです。Javaでもウェブサイトやウェブサービスを作ることは可能ですが、それならRubyやPHPなど他の言語の方が向いていますし、Javaに比べたらはるかに学習コストは低いためそちらの方がおすすめです。
- Javaエンジニアの働き方
Javaは業務システム開発が多いため、基本的に客先常駐型かつチームで開発していくスタイルです。個人でウェブサイト制作のお仕事を納品したり、場所にとらわれない働き方には向いていません。また将来的には様々な企業のサービス開発に携わりたいという働き方とも少し違って、企業の中で安定して長く働きたい人におすすめです。
- Javaの学習難易度
Javaは単体で動作する言語ではなく、他の様々な技術と掛け合わせて1つのシステムを開発できます。そのため、初心者が急に色々な技術を身につけるのはハードルが高く、構文も分かりやすくはないため、最初の言語には向いておりません。みっちり教えてくれる人や環境が必要です。
これらのJavaの特徴があなたのやりたいことと本当に合っているのか?を今考えてみましょう。
もしイメージと違いそうでしたら「じゃあ他にどんな言語がおすすめなの?」という疑問にこれから答えていきます!
Java以外におすすめなプログラミング言語
プログラミング言語を決めるときには、その言語で「開発できるもの・働き方や将来性・学習難易度」など総合的に考えて決める必要があります。
おそらくあなたの憧れているエンジニア像が、
- まずは小規模なウェブサイト制作を自分で請け負って納品
- ゆくゆくはウェブサービス(メルカリ・インスタグラム・Progate)などを開発したい
- 場所にとらわれずに働いたり、出社も自由な時間で柔軟に選びたい
- 今後も需要が高まっていき、様々な企業を掛け持ちながら働いてみたい
このようなイメージはざっくり「ウェブエンジニア」と呼ばれている職種です。
言語はHTMLやCSS、JavaScriptを学びつつ、その後の方向性によってRuby、PHP、Pythonなどの言語の学習が向いています。
結局複数の技術を覚える必要はありますが、例えばHTMLとCSSはその2つだけで簡単なウェブサイトを形にできるため、成長を実感しやすく学びやすいんです!
Javaに比べたら習得しやすいですが、初心者が0から仕事できるレベルまでを独学で目指すのは簡単ではないため、効率よくエンジニアになるにはプログラミングスクールでの学習がおすすめです。
効率よく学習するならプログラミングスクールへ
プログラミングスクールは経験者から教わるので学習スピードもレベルもアップし、転職や独立など仕事獲得できるレベルに独学よりもはるかに近づきます。
IT人材が足りていない現状や、エンジニアの平均年収は全職種の平均年収に比べて約100万円高い給与水準である時代背景を考えると、スクール代は自分への先行投資と考えてスクールで効率よく学ぶのがおすすめです。
弊社「侍エンジニア」では、あなたのやりたいことに合わせて講師もカリキュラムも変更し、仕事獲得までを完全個別学習で進めていくため、プログラムが書けるようになるのではなくプログラミングで人生が変わるまでをサポートしております。
無料カウンセリングでは、まずあなたの現状の不満やプログラミングを学ぶ目的を聞かせていただいた上で、今後のおすすめなキャリアや目指す方向性、最適な言語や学習プランをご提案しております。
プログラミングで現状を打破したいあなたを精一杯サポートいたしますので、下記のボタンより弊社のサービスの詳細や卒業生の実績をご覧いただいて無料体験へお申し込みください。
侍エンジニア無料カウンセリングへ申し込む
まとめ
いかがだったでしょうか?
Javaは扱うことができれば魅力的な言語であり、優れた人気言語ですが人気ランキングだけを見て安易に選んで挫折しているなら他の言語も考えてみましょう。
あなたがこの記事を読んで最適な選択ができたなら幸いです!