Javaのリスト(List型)とは?ArrayListの使い方も紹介

Javaの「配列」は、要素数を事前に決める必要があるため、柔軟性に欠けています。しかし、Javaの「コレクション・フレームワーク」には「List」があり、要素を順番にインデックスでの管理が可能です。

Listによる管理で、拡張for文やiteratorを使用して順番に処理を行うことができ、インデックスを利用した処理が早くなります。また、「List」はコレクションクラスを継承しているため、配列では使用できない様々なメソッドを利用可能です。

この記事では、JavaのList型についての基本的な使い方について解説します。

JavaのList型とは?

JavaのList型は、データを格納するコレクションの一つで、順序付けられた要素の集合です。List型を使うことで、複数の要素を効率よく扱うことができます。主な理由は、以下の通りです。

  • 要素の追加や削除が容易
  • インデックスによるアクセスが可能
  • 同じ要素を複数回含めることができる

これらの理由から、List型は多くのプログラムで利用されています。しかし、List型はインターフェースであり、実際に使用する際は、具体的な実装クラスを選択する必要があるでしょう。例えば、ArrayListやLinkedListなどが該当します。

ListとArrayListの関係性

JavaのListとArrayListは、コレクションフレームワーク内で密接な関係を持っています。Listはインターフェースであり、ArrayListはListインターフェースを実装した具体的なクラスです。

Listインターフェースを実装することで、ArrayListはリスト型の機能を提供ができます。これにより、要素の追加・削除・取得など、一般的なリスト操作が可能。

ArrayListは、動的配列を利用してデータを格納します。配列のサイズを自動的に変更できるのが特徴です。また、ランダムアクセスが高速であり、要素の追加・取得に優れたパフォーマンスが期待できます。ただし要素の追加や削除の際にデータの移動が発生するため、効率が悪くなることもあるでしょう。

ListとArrayListの違い

ListとArrayListの違いは、Listがインターフェースであり、ArrayListが具体的な実装クラスである点です。インターフェースであるListは、リスト型のデータ構造に必要なメソッドを定義しており、実際のデータの格納や操作方法は定められていません。一方、ArrayListはListインターフェースを実装し、動的配列を使ってデータを格納する具体的な方法を提供しています。

この違いにより、List型の変数には複数の実装クラスを代入することが可能です。例えば、ArrayListだけでなく、LinkedListや他の実装クラスもList型の変数に代入できます。柔軟性があるため、プログラムの拡張性やメンテナンス性が向上します。

なお、下の記事ではJavaのArrayListについて詳しく解説しているので、よければ参考にしてください。

JavaのArrayListとは?基本的な書き方や操作方法も解説

使い分け方

ListとArrayListの使い分けとしては、重複があります。

ある商品の種類と個数を管理する場合、商品の種類は重複しないためSet型になり、個数は重複することがあるため、List型が適しているでしょう。

また、データの挿入順に関心がある場合は、List型が望ましいです。その理由は、List型は要素の順序を保持するためです。順序不同で、重複を許さないデータ構造が求められる場合は、Set型が適しています。

使い分けは以下のようになります。

  • 重複を許さず、順序に関心がない場合: Set型
  • 重複を許し、順序に関心がある場合: List型

このように、適切な使い分けを理解することで、効率的なプログラムを作成できます。

Java List型の基本的な使い方

Java List型の基本的な使い方について説明します。まずList型をインポートし、Listインターフェースを実装したクラスを利用してインスタンスを作成。代表的なクラスには、ArrayListやLinkedListがあります。

次に、Listに要素を追加するにはaddメソッドを使用し、要素の取得にはgetメソッドを使用しましょう。また、要素の削除にはremoveメソッドが利用できます。これらの基本的な使い方を覚えることで、List型を効果的に使用が可能です。

Listの宣言・初期化方法

Listの宣言・初期化方法について解説します。まず、Listを宣言するには、以下のように型を指定して宣言します。

例: List list;

次に、初期化するには、具体的なListの実装クラスをインスタンス化します。代表的なクラスには、ArrayListやLinkedListがあります。

例: list = new ArrayList<>();

また、宣言と初期化を同時に行うこともできます。

例: List list = new ArrayList<>();

このような宣言・初期化方法を理解することで、List型を使いこなすことができます。

要素の追加・削除方法

要素の追加方法として、配列やリストに新しい要素を追加するにはappendメソッドを使用します。例えば、numbersというリストがある場合、numbers.append(6)と記述することで、リストに6という要素が追加されるでしょう。

また、要素の削除方法としては、removeメソッドやpopメソッドがあります。removeメソッドは、リストから特定の要素を削除するために使用。

例えば、numbers.remove(3)と記述することで、リストから3という要素が削除されます。ただし、リストに同じ要素が複数存在する場合、最初に見つかった要素のみが削除されるでしょう。

popメソッドは、指定したインデックスの要素を削除し、その要素を返します。インデックスを指定しない場合、リストの最後の要素が削除されるでしょう。

例えば、numbers.pop(2)と記述することで、2番目の要素が削除され、その要素が返されます。要素の追加・削除方法は以上の方法が一般的ですが、他にも様々な方法があるので、用途に応じて適切な方法を選択してください。

なお、下の記事ではJavaのリスト(List型)について詳しく解説しているので、よければ参考にしてください。

Javaのリスト(List型)とは?ArrayListの使い方も紹介

要素の取得・更新方法

要素の取得方法としては、インデックスを指定してリストや配列から要素を取得できます。例えば、numbersというリストがある場合、numbers[0]と記述することで、リストの最初の要素を取得が可能です。

要素の更新方法としては、インデックスを指定して要素に新しい値を代入します。例えば、numbers[2] = 9と記述することで、リストの2番目の要素に9という新しい値が代入。

リストや配列の要素数を取得したい場合は、len関数を使用します。例えば、len(numbers)と記述することで、numbersというリストの要素数が取得が可能です。

要素の取得・更新方法はシンプルですが、プログラムの中で頻繁に使用されるため、理解しておくことが重要になります。

Listメソッドの使い方

Listメソッドは、リストを操作するための様々な関数が提供。代表的なListメソッドには、appendメソッド、removeメソッド、popメソッドなどがあります。

Listメソッドは状況に応じた操作が可能で、例えば、リストに要素を追加する場合はappendメソッドを使用し、リストから要素を削除する場合はremoveメソッドやpopメソッドを使用しましょう。

また、Listメソッドではリストの要素をソートするためのsortメソッドや、リストを逆順に並べ替えるためのreverseメソッドなどもあります。これらのメソッドを使うことで、リストを効率的に操作が可能です。

Listメソッドを使いこなすことで、プログラムの効率やコードの可読性が向上します。上記で説明した関数以外にも、Listメソッドにはさまざまなものがありますので、適切なメソッドを選択し活用してください。

リストのイテレーション

リストのイテレーションは、リスト内の要素に順番にアクセスし、何らかの処理を行うことです。Javaでリストのイテレーションを行う方法はいくつかあります。代表的なものは以下の通りです。

概要
forループを使った方法 要素の数に応じて繰り返しを行い、インデックスを利用してリスト内の要素にアクセスします。
拡張forループを使った方法 リスト内の要素をコレクションから順番に取り出し、一つずつ処理を行います。
イテレータを使った方法 リスト内の要素を反復することを目的とした専用のインターフェースを利用し、要素を一つずつ取り出して処理を行います。

具体的な例を見てみましょう。例えば、以下のような整数値が格納されたリストがあるとします。

リスト:[1, 2, 3, 4, 5]

これらの要素をイテレーションして、それぞれの値を2倍にした新しいリストを作成する場合、forループを使った方法では以下のように実装できます。

for (int i = 0; i < list.size(); i++) {
int newValue = list.get(i) * 2;
newList.add(newValue);
}

拡張forループを使った方法では、さらにシンプルに書くことができます。

for (int value : list) {
newList.add(value * 2);
}

適切な方法を選ぶことで、リストのイテレーションが効率的に行われ、プログラムの品質も向上するでしょう。

リストの検索・ソート方法

リストの検索・ソート方法には、以下のようなものがあります。

概要
線形検索 リストの要素を先頭から順番に調べていき、目的の要素を見つける手法です。最もシンプルな検索方法であり、要素数が少ない場合には効率的になります。
例二分検索 ソート済みのリストに対して、中央の要素を比較しながら目的の要素を見つける手法です。効率的に検索が行えるため、要素数が多い場合に適しています。
例Collectionsクラスを利用したソート Javaの標準ライブラリであるCollectionsクラスのsortメソッドを利用し、リストの要素をソートする方法です。Comparatorインターフェースを実装したオブジェクトを引数に渡すことで、独自のソート条件を設定できます。

これらを用いて、あるリストから特定の条件に合う要素を検索・ソートする場合の具体例を見てみましょう。以下のような文字列のリストがあるとします。

リスト:[“apple”, “orange”, “banana”, “grape”, “kiwi”]

このリストから、”orange”という要素を検索する場合は、線形検索を利用します。

for (String item : list) {
if (item.equals("orange")) {
System.out.println("Found orange!");
break;
}
}

要素を辞書順にソートする場合は、Collections.sort()メソッドを用います。

Collections.sort(list);
System.out.println(list); // 結果: ["apple", "banana", "grape", "kiwi", "orange"]

Javaのリストでは、様々な検索・ソート方法で簡単に操作が行えます。適切な方法を選んで、効率的なコードを実装しましょう。

なお、下の記事ではJavaのメソッドについて詳しく解説しているので、よければ参考にしてください。

Javaのメソッドとは?呼び出し方や使い方も紹介

JavaのListと配列にまつわる基礎知識

JavaにおけるListと配列は、いずれも複数の要素を管理するためのデータ構造です。Listは、要素数が可変であり、便利なメソッドが用意されています。

一方、配列は要素数が固定で、構造がシンプルです。インターフェースや実装方法が異なるため、目的に応じて適切なデータ構造を選択しましょう。

Listと配列の違い

Listと配列はどちらもデータを格納するためのデータ構造ですが、それぞれ異なる特徴があります。

まず、Listは動的なサイズ変更が可能で、要素の追加や削除が容易。これに対して、配列はサイズが固定されており、要素の追加や削除には新しい配列を作成する必要があります。これがListと配列の最も大きな違いです。

また、Listはインターフェースであり、実装クラスによって内部的なデータ構造が異なります。ArrayListやLinkedListがその代表例で、ArrayListは内部的に配列を使用しており、インデックスによるアクセスが高速です。一方、LinkedListは連結リストを内部的に使用しており、要素の追加や削除が可能になります。

さらに、Listはジェネリクスを使って型安全を実現可能です。特定の型のデータだけを格納ができます。配列はジェネリクスを使用することはできず、型安全ではありませんが、プリミティブ型を格納できるという利点があるでしょう。

配列とListの相互変換

配列とListは互いに変換することが可能です。まず、配列をListに変換する方法についてですが、ArraysクラスのasListメソッドを使用することで容易に変換できます。

例えば、String型の配列をArrayListに変換する場合、以下のように記述。

String[] array = {"A", "B", "C"};
List list = new ArrayList<>(Arrays.asList(array));

次に、Listを配列に変換する方法です。ListインターフェースにあるtoArrayメソッドを使用して変換できます。ただし、この際に引数として新しい配列を渡すことが必要です。例として、String型のListを配列に変換する場合、以下のようになります。

List list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String[] array = list.toArray(new String[0]);

これらの方法を使えば、配列とListを自由に相互変換ができます。

なお、下の記事ではJavaの配列に要素を追加する方法を詳しく解説しているので、よければ参考にしてください。

Javaの配列に要素を追加する方法!配列操作の基礎も解説

Javaプログラミングのスキルを活かして収入を増やすなら

なかには、副業での収入獲得やフリーランスへの独立を目的にJavaプログラミングのスキル習得に励んでいる人もいますよね。

ただ、身につけたスキルをどう収入UPに繋げればいいのか、イメージが湧かない人もいるはず。

そんな方は、ぜひフリーランスのミカタをご活用ください。

出典:フリーランスのミカタ

フリーランスのミカタは、平均単価80万円以上の案件を取り揃える、ITエンジニアに特化したフリーランスエージェントです。具体的には、次のような週3回からフルリモートで請け負える案件を豊富に掲載しています。

また希望年収や稼働時間だけでなく、扱うプログラミング言語などを細かく指定して案件を探せるため、自分にあう仕事を見つけやすいサイト仕様になっています。

ただし、上記のような案件は条件として2〜3年の実務経験が求められるケースが多いです。そのため、応募する際はどれくらいの経験が必要なのかを前もってチェックしておきましょう。

フリーランスのミカタを活用すれば、中・長期的な安定収入が得られる案件が見つかりますよ。

どんな案件が掲載されているか気になる人は、下のボタンから自分にあう案件を探してみてください。

まとめ

今回紹介した基本のList型メソッドを理解しましょう。その後は他のメソッドと組み合わせたり、変数を利用したりして目的の処理を行い実際に動作させてみることが重要です。

処理が複雑になると扱いにくくなるため、小規模な簡単な例で練習し、疑問点を解消していきましょう。また類似の処理がインターネットで見つかることもあるため、参考にすると作業がスムーズに進みます。

なお、下の記事ではJavaのコンパイルについて詳しく解説しているので、よければ参考にしてください。

Javaのコンパイルとは?実行方法からjavacコマンドの基礎知識も紹介