##学習ログ
###配列
配列とは同一種類の複数データを並び順で格納するデータ構造。
配列の各要素には同一種類のデータしか格納できない。
配列の要素は0から始まる。
配列も変数と同様にデータ型を指定する。
配列変数の作成(宣言)
要素の型[] 配列変数名
//例
int[] score; //scoreをint型の配列変数として宣言。
score = new int[5]; //配列変数scoreにnew演算子で生成したint型の要素を5つ代入している。
//配列変数の宣言と要素の作成と代入は同時に行うことも可能
int[] score = new int[5];
//配列の中の要素を取り出す方法
score[0]; //配列変数scoreの中の1番目の要素を取得
//配列内の要素を変更する
score[0] = 50; //配列変数scoreの中の1番目の要素に30という値を代入することができる
//配列の要素数の取得
score.length; //配列変数にlengthというメソッドを使用すると配列内の要素の数を取得できる。
//lengthメソッドは文字列にも使用できる。String型変数名.length()という形になる。
//配列の省略記法
int[] score1 = new int[] {10, 20, 30, 40, 50};
int[] score2 = {10, 20, 30, 40, 50};
####配列をforループで回す
//従来のfor文
for(int i = 0; i < 配列変数名.length; i++) {
処理..
}
//従来のfor文 例
public class Main {
public static void main(String[] args) {
int[] score = {20, 30, 40, 50, 60};
for(int i = 0; i < score.length; i++) {
System.out.println(score[i]);
}
}
}
//拡張for文
for(要素の型 任意の変数名:配列変数名) {
処理..
}
//拡張for文 例
public class Main {
public static void main(String[] args) {
int[] score = {20, 30, 40, 50, 60};
for(int value : score) {
System.out.println(value);
}
}
}
####メモリ変数と配列
コンピュータは使用するデータをメモリに記録する。
メモリの中は碁盤の目のように区画整理されており、各区画には住所(アドレス)が振られている。
そして変数を宣言すると、空いている区画(どこが選ばれるかはわからない)を変数のために確保する(変数の型によって何区画を使用するか異なる)。
変数に値を代入するとは、確保していた区画に値を記録することである。
public class Main {
public static void main{String[] args) {
int[] a = {1, 2, 3};
int[] b = b;
b = a;
b[0] = 100;
System.out.println(a[0]); //100と出力される
}
}
####ガベージコレクション
javaの仕組みの一つ。
実行中のプログラムが生み出したメモリ上のゴミ(=どの変数からも参照されなくなったメモリ領域)を自動的に探し出して片付けてくれる。
####NULL
「何もない」という意味。
nullが代入されると、参照型の変数はどこも参照していない状態になる。
・int[]型などの参照型変数に代入すると、その変数は何も参照しなくなる。
・int型などの基本型変数には代入することができない。
int[] score = {1,2,3}
score = null;
score[0];
####2次元配列
2次元配列とは要素が縦横に並んでいるイメージ。
[0][0] | [0][1] | [0][2] | [0][3] |
---|---|---|---|
[1][0] | [1][1] | [1][2] | [1][3] |
[2][0] | [2][1] | [2][2] | [2][3] |
//2次元配列の宣言
要素の型[][] 配列変数名 = new 要素の型[行数][列数]
//2次元配列の要素の取得
配列変数名[行の添字][列の添字]
//例
int[][] scores = new int[2][3]; //2行3列の配列
scores[0][0] = 40;
scores[0][1] = 50;
scores[0][2] = 60;
scores[1][0] = 70;
scores[1][1] = 80;
scores[1][2] = 90;
System.out.println(scores[1][1]); //80