プログラミング Java

【Java入門】配列の扱い方まとめ

投稿日:2021年5月22日 更新日:

概要

配列の扱い方について学んでいきましょう。
配列は、同一の型の値を複数持つことができるデータ構造です。
・int型の配列だったら、int(数値)を複数個持っている。
・String型の配列だったら、String(文字列)を複数持っている。
というものです。
 

初期化

基本構文

型または変数名の後に[]を付けます。
代入する際は、配列数を指定します。指定しないとコンパイルエラーになります。

(コラム)
[](角カッコ)は、型の隣につけるのが一般的かなと思います。
ちなみにGoogle Style(Googleのコーディング規約)でも、型の隣に[]をつけるように明示しています。

4.8.3.2 No C-style array declarations
The square brackets form a part of the type, not the variable: String[] args, not String args[]

4.8.3.2 C言語形式での配列宣言は禁止する
角括弧は型の一部であり、変数ではありません。String[] argsであり、String args []ではありません。

初期化子

初期化子とは、配列の次元数と値の代入を同時に行う方法です。

 

次元

次元とは、配列の単位です。
配列とは複数の値を持つことができるデータ構造でしたよね。
以降で図解も含めながら理解を深めていきましょう。

一次元配列

[]が1つの配列です。
値が箱のような区切り毎に入っているイメージです。

※indexについては後で説明致します。
 ここでは、配列の要素にアクセスするための番号であるという認識でOKです。

多次元配列

多次元配列とは、配列の中にある配列です。
具体的に、二次元配列・三次元配列を見ていきましょう。

二次元配列
[]が2つの配列です。
多次元配列になると、値を持っているのは最後の次元(ここでは2次元目)です。
1次元目は2次元目をまとめる単位になっています。

三次元配列
[]が3つの配列です。
[]が増えるごとにデータ構造が複雑になるので、三次元以上の多次元配列を使うことは無いと思います。
三次元配列になると、配列の構造がちょっとわかりずらくなるので以下の図では表とコードを対応付けてみました。

 

インデックス

配列の要素を参照するための番号です。
0から振られており、要素の数だけあります。
(0から振られる関係上、最後のインデックス番号は要素数-1になります)

例外

配列のインデックス番号の範囲外を指定すると、例外(ArrayIndexOutOfBoundsException)がスローされます。

 

コピー

参照コピー

配列は参照型オブジェクトなので、単純な代入は参照先をコピーするだけになります。
そのため、コピー先を変更すると、コピー元も変更されます。

参照型については、以下を参照下さい。
⇒参照型とは?

cloneメソッド

プリミティブ型の1次元配列

同じ値をもった配列が生成されます。
参照先をコピーしているわけではなく、別のインスタンスを参照しているため、コピー先の変更はコピー元に影響を与えません。
参照先が異なることは、==による等価判定でfalseになることでも確認できます。

プリミティブ型の多次元配列

(2021年5月25日追記)
1次元配列においては誤りではありませんが、多次元配列においては2次元目以降がコピー元と同じなので参照コピーと変わらないことを私が理解したため、追記致します。
実際、公式ページでもcloneメソッドはシャロ―・コピーであると記述されています。

オブジェクトの「シャロー・コピー」を生成しますが、「ディープ・コピー」は生成しません。

クラスObject – clone
 

多次元配列をcloneした結果を確認すると、変数の参照先は異なるものが生成されていますが、配列の中身は同じものを参照しています。

つまり、多次元のプリミティブ型配列は、参照する入り口が変わっただけで、中身の参照先は変わっていないので値を書き換えるとコピー元にも影響します。

 

まとめ

  • 配列は同一型の複数の値を扱うデータ構造である。
  • 配列は初期化してから使う必要がある。
  • 多次元配列とは配列の中にある配列のことである。
  • インデックスは配列を参照するための番号である。
  • コピーには参照コピーとcloneメソッドによる値の複製がある。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

【Java】モジュールシステムの概要と実装例

概要 Javaのモジュールシステムについて、概念的なイメージと実際のコード例で理解を深めるための記事です。 読者はJava Silverの資格勉強中の方やJava入門者を想定しています。 内容は以下の …

【Javaサンプル】自動販売機(Level4) ドメイン駆動

前回(Level3) Level3ではクラス分けすることを行いました。 しかし、私の目指すところのドメイン駆動開発になっていません。 また、ロジックもまだまだ複雑さが残っており、ぱっと見て何をやってい …

Observerパターンってどう使うの?を考える(商品の予約)

目的 Observerパターンの使いどころとなる状況を具体例でもって理解する。   ゴール(実現すること) 商品の予約システムにおけるユーザ通知   実装する機能 ・商品を予約する …

【Bootstrap】入力フォームを作成しよう!

概要 SpringBootチュートリアルで作成した各画面の入力フォームをBootstrapに置き換えます。 また、containerを使用することで容易にグリッドシステムを導入できます。 実装 検索画 …

VBAが書けるまでにどのくらいかかったか?

これからVBAを学ぼうとしている人向けに参考情報として書きます。 前提 前提として、私の経歴を少し書いておきます。 ・PHPでのWeb開発1年未満 ・Javaの簡易なアプリは作れる ・SQLも理解して …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。