Help us understand the problem. What is going on with this article?

【Java】配列とArrayListの違いについて

初心者には同じにしか見えない...

「Arrayってそもそも配列ですよね?ArrayListもArrayってあるから配列だよね!?」

これは僕だけではないと思います。

使用していく中で経験的にわかっていくとは思いますが、ちゃんと理解していないと困ることもあるかと。

自分なりの理解をメモしておきますので、初心者の方に対して少し違いがイメージできるようになる助けになればと思います。

そもそもクラスって?

  • クラス
    • データ(変数)
    • 処理(メソッド・関数)

要はデータと処理を一まとまりにして扱うよというもの。

これが最初はわからなかったし、今でもそんなに便利なものなのかどうかもよくわかっていませんが。。。

よく車とかで説明されたりしますが、結局「言ってることはわかるけど。。。」という消化不良状態でした。

しかし、結局はテンプレだと考えればすっきりしました。

クラスはテンプレ、インスタンス化はテンプレの利用

初心者にはクラスとかインスタンス化しないと使えないとか言われてもなんのこっちゃという感じだと思います。

車でいうと
* 車種
* 排気量
* 値段

とかいうものをまとめてクラスとして、インスタンス化して
* 車種:プリウス
* 排気量:1200CC
* 値段:200万円

とすることで、クラスが利用できるようになるとか言われてもね。

走るという処理も、インスタンス化して、格納されている変数を下に動作するとかなんとか?書いててもよくわかりません。

しかし、そもそもテンプレだと考えればすっきりします。

車を作ろう!と思った時に、
車種:デビル
排気量:1億
燃料:原油

よし作った!んじゃ売ろう!あれ、値段どうするよ?

ってなると困るやん?てか最初の段階で車作ろうぜって話をする人はその時その時で違う人のはず。その時に決め事がなければ最初に決めておくことは人によりけりってなると毎回毎回現場は困るわけです。

ということで、ここで車クラスというテンプレを作っといて
車種
排気量
燃料
値段

速度
走る
止まる
バックする
を最初に決めてね!ってしとけば、「これ決めてへんかった」とか「何決めなあかんかったっけ?」ということはなくなります。

んでこのテンプレに沿って「じゃあ車種はデビルって奴にしようぜ!」って決めていくのがインスタンス化ですね。

厳密には違うのでしょうが、この理解でほぼ問題ないかと思います。

んで処理に関しても、走るっていう処理を設計ごとにどのくらいのスピードで動くかを決めていくんじゃなくて、速度という値を先に決めておいて、その速度の値を使って、「このくらいのスピードで前に進む」とテンプレ化しておけば毎回同じ命令の走るでちゃんと走るという感じ。

だから値だけ配列のようにまとめておくよりも、その値を使ってどうするのっていう処理もまとめておけば、記述が統一されるんですね。

テンプレだと思えば便利なものだなと思えます。

配列はクラス

クラスの中の変数を取り出す時は
クラス名.変数名
というように書くので、配列の要素数を取り出すには、配列のクラスの中にあるlengthという変数に要素数が入っているので、

array.length

のようにすれば取り出せる。

ArrayListはクラスを格納してるかつカプセル化

カプセル化してると変数に直接アクセスできません。というのも

array.length

のように書いてもエラーになるだけということ。

じゃあどうすりゃいいのっていうとカプセル化の説明などで出てくる、getterやsetterなどのメソッドを使用して変数の値を取得したりするんですね。

メソッドを使わないといけないというところがミソ。

つまり、要素の数を取得する時に

array.size();

のように最後に( )が必要になるということ。メソッドだから。

メソッドを使っているのか、変数名を指定して取得しているのかっていうところで書き方が違うので、「とりあえずこう書けば動く」と覚えるよりも「メソッドを使っているのか変数名を指定してるのか」の違いはわかっていないと( )をつけるのかどうかで迷ったりするかと思います。

あんまりまとまってないですがまとめ

とりあえず自分の頭の整理のつもりで書きました。厳密な説明ではありませんが、漠然としたイメージが少しはすっきりしたイメージに変わればと思います。

また、このあたりの話は別記事でまとめていきたいと思います。

mako0104
webエンジニアを目指して勉強中。主にphpを使っています。超初心者が陥る「サイトを参考にしてやってるのにエラーが出る」が乱発します。根気強く解決して、同じような状況にある人の役に立てればと思いのもとに投稿していきたいと考えています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした