JavaのList型とは!?ArrayListの使い方を基礎の基礎から解説!

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

JavaにはListという配列よりも便利な型がありますが、「使い方がよくわからない……」「どんなときに使えばいいの?」「ArraListって何?」など疑問を持っている方も多いのではないでしょうか?

そこで、この記事ではListについて、以下の内容で解説していきます!

【基礎】List型オブジェクトの宣言と初期化
【基礎】ループを使った要素へのアクセス
【基礎】Listのメソッドの使い方
【発展】Listの要素をソートする方法
【発展】Listと他のコレクションとの変換方法

今回はListについて、わかりやすく解説します!

List型オブジェクトの宣言と初期化

まず初めに空のList型オブジェクトの作り方を解説します!

List型のオブジェクトにはArrayListクラスなどで生成したインスタンスを格納します。

インスタンスを生成する際には、new演算子を用います。

例えばString型の要素をもつListの場合は、以下のように記述します。

なお、List型オブジェクトの宣言と初期化の詳しい内容については、こちらを参考にしてくださいね。

ループを使った要素へのアクセス

for文などのループ処理を使って要素へアクセスする方法について解説します。

iteratorを使ったfor文

Listインターフェースを実装するクラスでは、iteratorメソッドを使ってIterator型のオブジェクトを使用することができるようになります。

Iterator型のオブジェクトからはhasNextメソッドやnextメソッドを呼び出して利用できます。

hasNextメソッドは、リストが次の要素を持っている場合にtrueを返します

nextメソッドはリストの次の要素を返します

Listインターフェースを実装するクラスには、例えばArrayListクラスなどがあります。

実行結果:

iteratorメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

forEachメソッド

Java8で追加されたforEachメソッドとラムダ式を使うと、リストの要素全てにアクセスする場合に簡潔に記述することができます。

実行結果:

forEachメソッドの使い方についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

Listのメソッドの使い方

Listインターフェースにはたくさんのメソッドが用意されています。

メソッドを表にまとめました。

メソッド説明記述例
addリストに値を追加list.add(1)
addAllリストにリストを追加list1.add(list2)
setリストの値を変更list.set(0, 3)
getリストの値を取得list.get(0)
sizeリストの要素数を取得list.size()
indexOfリストから値の要素番号を取得list.indexOf("a")
subListリストから範囲を指定してコピーsubList(1, 3)
containsリストに値が含まれるか判定list.contains("a")
removeリストから指定する要素番号の値を削除list.remove(1);
distinctリストで重複する値を削除list.stream().distinct()
cloneリストのコピーlist.clone()

それぞれのメソッドの使い方についてみていきましょう。

add, addAllで要素を追加する方法

addメソッドはリストに値を追加する場合に使用します。

addAllメソッドはあるリストに別のリストを追加する場合に使用します。

実行結果:

addメソッド、addAllメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

setで要素を書き換える方法

setメソッドはリストの要素を書き換える場合に使用します。

実行結果:

setメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

getで要素の値を取得する方法

getメソッドは要素の値を取得する場合に使用します。

実行結果:

getメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

sizeで要素数を取得する方法

sizeメソッドはリストの要素数を取得する場合に使用します。

実行結果:

sizeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

indexOfで要素の位置を検索する方法

indexOfメソッドは指定した値がリスト内のどこに位置するか検索する場合に使用します。

実行結果:

indexOfメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

subListでListの一部をコピーする方法

subListはリスト内の範囲を指定し、範囲内のリストで新しいリストを作成する場合に使用します。

実行結果:

subListメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

containsで要素の有無を確認する方法

containsメソッドは指定した値がリスト内にあるかないか判定する場合に使用します。

実行結果:

containsメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

removeで要素を削除する方法

removeメソッドは要素を削除する場合に使用します。

実行結果:

removeメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

distinctで重複する要素を取り除く方法

distinctメソッドはJava8から追加されたStream APIです。

リスト内の重複する要素を取り除く場合に使用します。

実行結果:

distinctメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

cloneでListの全てをコピーする方法

cloneメソッドはリストのすべてをコピーする場合に使用します。

実行結果:

cloneメソッドについて詳しく知りたい方は、こちらを参考にしてくださいね。

Listの要素をソートする方法

リスト内の要素を順番に並べ替える場合には、Collectionsクラスのsortメソッドを使用します。

実行結果:

リストの要素をソートする方法についての詳しい解説は、こちらを参考にしてくださいね。

Listと他のコレクションとの変換方法

Listと他のコレクションとの相互変換についてみていきましょう。

配列とListの相互変換

配列からListに変換する場合は、ArraysクラスのasListメソッドを使用します。

Listから配列に変換する場合は、ListインターフェースのtoArrayメソッドを使用します。

実行結果:

配列とListの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

ListとSetの相互変換

それぞれのインスタンスを生成する際にコンストラクタの引数に変換前のオブジェクトを指定することで変換することができます。

実行結果:

ListとSetの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

ListとMapの相互変換

ListからMapへ変換する場合は、Java8から追加されたStream APIcollectメソッドを使うと簡潔に記述することができて便利です。

MapからListに変換する場合は、Listの要素にMapの値を変換する場合とキーを変換する場合とで使うメソッドが異なります。

値を変換する場合はvaluesメソッドを、キーを変換する場合はkeySetメソッドを使用します。

実行結果:

ListとMapの相互変換についてもっと詳しく知りたい方は、こちらを参考にしてくださいね。

ListとArrayListの違い

ListとArrayListは混同されることが多いので、違いについて解説します。

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

インターフェースはオブジェクトの型として宣言時に使うことはできますが、インスタンスを生成することはできません

以下のような記述は可能です。

Listは左辺のようにオブジェクトの宣言時に型として使用することはできますが、右辺でnew句を使ってインスタンスを生成する場合には使用することはできません。

new句を使ってインスタンスを生成する場合は、ArrayListなどのListを実装したクラスがよく使われます。

ちなみに、ArrayListはオブジェクトの宣言時の型として使用することももちろん可能です。

ではオブジェクトの宣言時にList型で宣言するのがいいのか、ArrayList型で宣言するのがいいのかどのように使い分けたらいいのでしょうか?

どちらも使い方によってメリット、デメリットがあります。

詳しくはこちらを参考にしてください。

まとめ

いかがでしたか?

よく使うメソッドからあまり見かけないメソッド、新しいメソッドなど多くのメソッドを解説してきました。

これらのメソッドの使い方を覚えることでJavaのListを使いこなすことが出来るようになります。

もし、Listについて忘れてしまったらこの記事を思い出してくださいね!

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

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


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

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


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

もし、あなたが、

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

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

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

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

cta_bannar-java1

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

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

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

最新情報をお届けします

書いた人

オータケ

オータケ

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