Javaのコレクションクラスまとめ(ListとArrayListの違いも解説)

オータケ
書いた人 オータケ
侍エンジニア塾ブログは、未経験からWebアプリ開発と仕事獲得をサポートする
侍エンジニア塾のオウンドメディアです。
プログラミング学習を覗き見

こんにちは!フリーランスのオータケです。

みなさんJavaプログラミングを楽しんでいますか?
Javaにはコレクションという大きさを決めない配列のようなものがあります。

そして、コレクションの中にはListというインタフェースがあります。

皆さんはListArrayListの違いを知っていますか?

そして使い分けについてどのようにしていますか?

もしわからないと思った貴方にはこの記事は必見です!

この記事を見ればListがどういったものかArrayListとの違いは何かを学ぶことができます!

この記事では、コレクションListについて

・コレクションとは
・Listとは
・ArrayListとは

という基本的な内容から

・宣言の型はListとArrayListのどちらを使うべきか

など具体的な内容についても解説していきます。

今回はコレクションとListについて、使い方をわかりやすく解説します!

コレクションとは

コレクションとは、大きさが決まっていないが配列のように多数の値をまとめて操作できるものと考えるとよいでしょう。

大きさが決まっていませんので、必要な分の数だけデータを格納することができます。

コレクション・フレームワークとは

コレクションには下記のように用途に応じて主に3種類が用意されています。

リスト(List) 順序通りに並べて格納
セット(Set) 順序があるとは限らず格納
マップ(Map) ペアで対応づけて格納

このように種類が用意され柔軟に扱うことを考えられているのがコレクション・フレームワークです。

コレクション・フレームワークは1つのクラスだけでなく、多くのクラスとインターフェースから構成されています。

コレクションクラスとは

List」「Set」「Map」はインターフェースとして用意されています。

実際に使用する際には、これらのインターフェースを実装したクラスを使用します。

よく使われるのはListArrayListなどです。

Listはインターフェースで、ArrayListはListを実装したクラスになります。

ArrayListのようにコレクション・フレームワークのインターフェースを実装したクラスのことをコレクションクラスといいます。

それではよく使われるListやArrayListについて詳しく解説してきます!

Listとは

Listインターフェースと呼ばれる抽象メソッドのみをもったクラス的なものです。

このインタフェースは単体では使うことができないため実装という手順が必要になります。

インタフェースを実装することで実装したクラスを使うことができるようになります。

ArrayListとは

ArrayListとはListインタフェースを実装したコレクションクラスです。

Arrayという名にあるように配列のような感覚で扱えます。

ちなみにListを実装したクラスには他にもLinkedListStackといったクラスが存在しています。

宣言の型はListとArrayListのどちらを使うべきか

前項まではListとArrayListのそれぞれについて説明を行いました。

一見すると同じように見える両者ですがListとArrayListでは大きな違いがあります。

まずListはあくまでもインタフェースであるためインスタンスの生成ができません

例えば、

とすることは出来ません

これはListがインタフェースであり、抽象メソッド(一言で中身がないメソッド)しか保持していないという理由があります。

ただし、次のコードのように宣言側の型として使うことはできます

このような書き方は可能です

これに対し、ArrayListはListの実装クラスであり抽象メソッドの処理内容が定義されているため、ArrayListは下のような書き方をすることができます。

とどちらを使うべきでしょうか?

例えば、宣言をListでインスタンス生成をArrayListで行った場合は

メリット
・ArrayListからLinkedList等別のコレクション(データ型)に変更したい場合宣言時のListには手を加えなくても良い

デメリット
・ArrayListにしかないメソッドを使いたい場合、宣言はListであるため型キャストをするなど一手間必要になる。

といったことがあり筆者としてはケースバイケースでその時の状況にあった形で使い分けをすべきではないかと思います。

それでは、宣言の型にListを使う方がいい場合とArrayListを使う方がいい場合、それぞれの場合についてサンプルコードで確認していきましょう!

Listを使う場合

宣言の型にListを使う方がいい場合は、例えばArrayListからLinkedList等別のコレクションに変更したい場合などでした。

サンプルコードで確認していきましょう。

なおListで宣言する場合は、java.util.Listをインポートする必要があります。

ArrayListで定義する場合は、java.util.ArrayListをインポートする必要があります。

LinkedListで定義する場合は、java.util.LinkedListをインポートする必要があります。

実行結果:

このサンプルコードでは、ArrayListからLinkedListへ変換しています。

変換元のオブジェクトはListで宣言しているので、特に手を加える必要はありません

ちなみに、LinkedListはArrayListと似ていますが、要素がどのように並んでいるか別で管理しているために、要素を追加したり削除したりする場合にArrayListと比べて高速に動作するというメリットがあります。

しかし、要素を先頭から順にたどるため要素を検索する場合はArrayListと比較して遅くなるというデメリットもあります。

ArrayListを使う場合

宣言の型にArrayListを使う方がいい場合は、例えばArrayListにしかないメソッドを使いたい場合などでした。

Listのメソッドにはなくて、ArrayListにしかないメソッドとしてListをコピーするcloneメソッドがあります。

cloneメソッドを使用するサンプルコードで確認していきましょう。

実行結果:

このサンプルコードではArrayListクラスのcloneメソッドを使用してArrayListのオブジェクトをコピーしています。

なお、Listのコピーについての詳しい解説はこちらも参考にしてくださいね!

まとめ

ここでは、コレクションやコレクションクラスについて解説してきました。

またコレクションの中でもよく使われるListやArrayListについて詳しく解説しました。

ListはインタフェースでありArrayListはそのインタフェースの実装クラスであることをお伝えしました。

そして、ArrayListを定義する際に受け取り側の方をListにする方法があり、なぜそのようにするべきかはケースバイケースであることも解説をしました。

もしListとArrayListの違いを忘れたらこの記事を思い出して下さい!

Javaカリキュラム無料公開中!
この記事はJava入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Java学習に必要な情報を一つにまとめていますので効率よくJavaを学ぶことが出来ます。この機会に是非活用していただければと思います。


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーランスをされている市川友哉さん。33歳で、プログラミングを学び始め、4ヶ月という短い期間でフリーランスエンジニアとして独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


最短でJavaを習得したい方へ

もし、あなたが、

「難しすぎて学習が全然進まない」
「学習量が膨大でゴールが見えない」
「エラーを解決するのに何日もかかってしまう」

など、プログラミング学習やキャリアに関してお困りであれば、まずは『無料体験レッスン』にお申し込み下さい。

あなたにとって、最適の解決策をご提案させていただきます。

詳しくは下の画像から詳しいサービス内容をご確認ください。

cta_bannar-java2

非常識な結果を出した卒業生

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。