・はじめに
この記事ではプログラミング言語におけるコレクションをRubyのものとJavaのものとを比較しながら学習、まとめていく記事となっています。・コレクションとは?
最初にコレクションとは何かから考えていきます。コレクションとは「プログラミングで扱う変数をグルーピングしたオブジェクト」のことです。例としては、配列、リスト、セット、マップが挙げられます。個人的には(Javaにおける)クラスもフィールド変数という変数やメソッドなどのデータをまとめて格納するオブジェクトなので、こちらもコレクションとして考えてもいいのではないかと考えています。(おそらく間違っていますが、こう考えると理解がしやすいと感じています)
Javaにおけるコレクション
Javaは静的型付け言語です。なので変数を宣言する場合、その変数がどの型の変数なのかを宣言しなければなりません。Javaのコレクションの宣言
//変数の宣言は型を宣言する必要がある。
String studentName = "ディッセンバー山田";
//配列の宣言
String[] studentMembers = {studentName, "カクバル鈴木", "薪割慎吾"};
//ArrayListの宣言
List<Integer> studentNumbers = new ArrayList<>();
Rubyにおけるコレクション
Rubyは動的型付け言語に分類される言語です。であるので実行時に変数の型が自動的に決定されるため、こちらが宣言をする必要がありません。しかし、宣言する形は決まっているので注意する必要があります。Rubyのコレクションの宣言
array = [1, 2, 3, 4, 5]
#配列は変数名 = [要素, "文字列要素"]のように宣言する。
animalNames = ['たぬき', 'きつね', 'くじら']
#ハッシュの宣言(形は後述)
foodList = {"ソーセージ" => 300, "キノコ" => 120}
・配列とは
ここでは実際にJavaの配列とRubyの配列を比較してそれぞれどのような特徴があるのかについてみていきます。・Javaにおける配列
Javaにおける配列は静的配列で初めに要素の数を設定しなければならないという特徴があります。なので初めに設定した要素数よりも多くの要素は設定できません。これのおかげでメモリの消費量を少なくすることができています。さらにJavaの配列はインデックスを使用しているのでランダムアクセスを得意としています。
Javaの配列
//配列の大きさを5と指定して初期化
int[] studentNumbers = new int[5];
//配列に値を入れる。
studentNumbers[0] = 1;
studentNumbers[1] = 2;
studentNumbers[4] = 5;
//値のデフォルトは0
System.out.println(Arrays.toString(studentNumber));
//出力結果⇒[1, 2, 0, 0, 5]
//配列は5なのでそれ以上の値を入れようとするとエラー
studentNumbers[5] = 6;
//⇒Index 5 out of bounds for length 5 エラー
//インデックスを使用したランダムアクセス
studentNumbers[2] = 10;
int index = 2;
System.out.println(studentNumbers[index]);
//出力結果⇒10
Rubyにおける配列
Rubyにおける配列はJavaとは異なり、動的配列のため要素数を設定する必要がなく、要素の追加・削除が容易に行うことができます。もし要素が追加されたり、削除されるとメモリが再割り当てされます(反対にメモリ消費量が多くなるというデメリットも存在します)。しかしJavaと同じ点としてインデックスを使用しているためランダムアクセスを得意としています。
さらに、Rubyの配列には多くのメソッドが用意されているので効率的な配列の操作が可能となっています。
Rubyの配列
#Rubyの配列は 変数名 = [要素, 要素]と宣言する。
studentNumbers = [1, 3, 10, 29]
#要素の追加(一番後ろに追加)
studentNumbers.push(6)
puts studentNumbers
#実行結果⇒ [1, 3, 10, 29, 6]
#要素の取得
puts studentNumbers[2]
#実行結果⇒10
#要素の削除
studentNumbers.delete(29)
#実行結果⇒29が消されて、空いたところが詰められる
puts studentNumbers
#=>[1, 3, 10, 6]
#要素数の確認
puts student.length
#実行結果⇒4
・まとめ
このようにコレクションとは、「プログラミングで扱う変数をグルーピングしたオブジェクト」のことです。今回はその種類の1つである配列を見ていきました。Javaにおける配列は事前に配列の要素数を決めなければならないが、その分メモリの消費量が少なくて済み、反対にRubyにおける配列は要素の追加・削除を自由に行えるが、その分メモリの消費量は多くなってしまうというメリット・デメリットを持つことがわかりました。