2
0

More than 1 year has passed since last update.

スッキリわかるJava入門 第3版を読んでみて- part4 -配列

Last updated at Posted at 2023-08-03

はじめに

こんにちは(・ω・)ノ
今回は配列について学びました!

第4章 配列

1.配列のメリット

データ構造...一定のルールに従ってデータを格納する形式
代表的なもの 配列

配列とは...
 同一種類の複数データを並び順で格納するデータ構造
<イメージ>
箱が連続して並んでいる
[0][1][2][3][4][5][6][7]

箱の一つひとつを 要素
配列の各要素には同一種類のデータしか格納できない
 ⇨「1つ目には数値、2つ目には文字列」のようなことはダメ🙅

各要素にある番号を 添え字
添え字は0から始まる決まりになっている

2.配列の書き方

配列の作成には以下の2ステップが必要
Step1.配列変数の宣言
 要素の型[] 配列変数名
Step2.要素の作成と代入
 配列変数名 = new 要素の型[要素数]
上記のStep1,2を同時に行うことも可能
例:int []scores = new int[5];

配列の要素数の取得
 配列変数名.length
配列の利用方法
scores[1]=10;のように添え字を用いて利用する
※添え字は「0」からなので「1」は先頭から2番目に代入されることに注意

配列の初期化
変数の値を取り出す前には必ず値を代入して初期化する必要がある
⇨コンパイルエラーとなってしまうから

しかし...
配列の要素は自動的に初期化されるためコンパイルエラーにならない
要素がどのような値で初期化されるかは型によって決まる
・int,doubleなどの数値...0
・boolean型...false
・String型...null

配列作成、初期化の省略記法
1.要素の型[]配列変数名=new要素の型[]{値1,値2,値3,...};
2.要素の型[]配列変数名={値1,値2,値3,...};

3.配列と例外

範囲外要素の利用による例外の発生
 ArrayIndexOutOfBoundsException
 上記エラー発生

4.配列のデータをまとめて扱う

for文と組み合わせて使うことができる

for(int i = 0;i < 配列変数名.length; i++){
配列変数名 [i]を使った処理
}

拡張for文

for(要素の型 任意の変数名 : 配列変数名){
︙
}

5.配列の舞台裏

public class Main{
    public static void main(String[] args){
        int[] arrayA = {1,2,3};
        int[] arrayB;
        arrayB = arrayA;
        arrayB[0] = 100;
        System.out.println(arrayA[0]);
    }
}

上記の結果は1ではなく100!?
なんで...?

コンピュータはデータをメモリに記録
⇨最初の要素のアドレスが代入される

:sparkles:int[] scores = new int[5]を実行した際のメモリの様子
1.int型の要素を5つ持つ配列がメモリ上に作成される
2.int[]型の配列変数scoresがメモリ上に作成される

:sparkles:プログラムからscores[n]と指定されたら
1.scoresから番地を取り出し配列を見つける
2.見つけた配列の先頭要素からn個後ろの要素の区画を読み書きする

配列を指し示す動作... 参照
メモリ上の番地を代入する変数... 参照型変数
intやboolean... 基本型変数

上記のことから
arryBでコピーした時にarrayAの先頭番地もコピーしている
⇨変数arrayBは変数arrayAと同じ配列を参照している
arrayB[0] = 100;とarrayA[0] = 100;は同じ

だからarrayA[0]は100が出てくる

6.配列の後片付け

ガベージコレクション
実行中のプログラムが生み出したメモリ上のゴミを自動的に片付ける

null ...何もない
配列を意図的に参照されないようにする

:sparkles:nullとは
1.int[]型などの参照型変数に代入するとその変数は何も参照しなくなる
2.int型などの基本型変数は代入できない

NullPointerException
nullが格納されている配列変数を利用しようとすると発生する

7.多次元の配列

これまでの配列は1次元配列
1次元配列を元に縦の並びを追加したもの... 2次元配列

2次元配列の宣言
 要素の型[][]配列変数名 = new 要素の型[行数][列数];

2次元配列の要素の利用
 配列変数名[行の添え字][列の添え字]

まとめ

配列の添木が0から始まることを気をつけたいなと思いました!
配列の舞台裏の例題をはじめに見た時はarrayA[0]は1だと思ってましたが舞台裏のメモリではあんな風に動いていたんですね ((¯ω¯*))フムフム
裏の動きをしっかり理解できたのはよかったと思いました!

今回もありがとうございました!
ではまた〜 *˙︶˙*)ノ"

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0