https://www.sejuku.net/blog/wp-content/themes/voice_child/images/samurai_logo.png 侍エンジニア塾が運営するプログラミング入門者向け学習情報サイト

【Java入門】ArrayListでのList型の宣言とその使い方総まとめ

オータケ
書いた人 オータケ


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

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

Javaで配列を使う時に不便だと感じませんか?

配列を扱うよりもListを扱った方がメソッドがより多く使えるため、簡単に様々なことができるようになります。

この記事では、Listについて

  • List型オブジェクトの宣言と初期化
  • ループを使った要素へのアクセス
  • Listのメソッドの使い方

という基本的な内容から、

  • Listの要素をソートする方法
  • Listと他のコレクションとの変換方法

などの応用的な使い方に関しても解説していきます。

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

【体験談】あなたは大丈夫?学習効率をなめて痛い目をみた話

突然ですが、あなたは学習効率をなめていませんか?

まず、私が実際にやってしまったプログラミング学習の失敗体験を聞いてください。

どの言語学習にも当てはまる失敗パターンだった・・・

私は、ある程度の目的と目標を持ってJava言語の独学で勉強していました。
使ったものは、

  • 学習書籍
  • 無料学習サイト

この2つでした。

「Java」を勉強しようと思った理由は、Javaが一番有名でスタンダードだったからです。

しかし、なかなか学習が進まない中、恐ろしいことに気づきました。
そもそもJavaで何が作れるのかうまく把握していないことに気づいてしまったのです。

そこで、キャリアアドバイザーの友人や現役エンジニアの先輩に相談した結果、自分がやりたかった学習の方向性がかなりズレてしまっていたことを知りました。

自分がやりたかった方向性として、

そして学習の問題点として、

  • 書籍の流れ通りに学習することで全体像が把握できていなかった
  • 何を作る予定なのかが明確になかった
  • 将来どうなりたいのか軸がブレブレだった

以上がありました。

今回はJavaという例でしたが、どの言語にも当てはまるよくある挫折例なので注意しましょう。

▼キャリアコンサルタントと一緒にキャリアを考えよう(無料)

失敗体験から学んだ「学習する前」が最重要であること

先ほどは、がむしゃらな学習で失敗した体験談をお話してきました。ここからが重要です。

失敗から学んだ重要なことは、

  • 経験豊富な第三者に相談して、自分にない視点でキャリアを見直すこと
  • 目的・目標設定を必ずすること。必ずです。
  • 学習経験者と一緒に学習スケジュールを作ること

この3つでした。

もうお気づきかもしれませんが、全て「学習前にすること」ですよね。

失敗があるので断言できますが、学習前に勝負は決まってしまいます。
これから学習するみなさんは、十分注意してください!

▼キャリアコンサルタントと一緒にキャリアを考えよう(無料)

質の高い目的・目標設定でキャリアの広がりは100倍以上

あなたのプログラミング学習の目的はどんなものでしょうか?

この2つのうちどちらかである方は多いかもしれません。ですが、これでは抽象的すぎて今後何をすればいいのかが分からず、学習効率がかなり悪くなってしまいます。

今後の学習を効率的に進めるためにも、明確に将来どうなりたいのかを決めて、そこに向かって目標設定することで人生を切り開くきっかけになっていきます。

実際にプログラミングの挫折率9割という挫折率の高さを考えると、独学であれこれと参考書や学習サイトに手を出して結局身につかなかったということも少なくないのです。

まずは目的・目標設定を決め、学習する軸を決めて効率的な学習環境を整えましょう。

▼キャリアコンサルタントと一緒にキャリアを考えよう(無料)

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-java2

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

活躍する現役エンジニア

人気記事セレクション

LINEで送る
Pocket

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

最新情報をお届けします

書いた人

オータケ

オータケ

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