PR

【完全ガイド】Java:ListとMapの使い方をわかりやすく3分で解説

Java

Java開発の登竜門コレクションフレームワークを正しく理解していますか?コレクションフレームワークというと難しく聞こえるかもしれませんが、ListMapという記述を見かけたことがあるかもしれませんが、それらを総称した言い方です。

本記事では、ListMapを中心に、実務で即戦力となる知識を網羅的に解説します。初心者から中級者まで、全てのJavaエンジニア必見の内容です。

関連 Javaの1stステップ:基本的な構文ルールを復習する

スポンサーリンク

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

Javaのコレクションフレームワークは、データの集まりを効率的に扱うための仕組みです。主な利点は以下の通りです。

  • データ構造ごとの操作方法を統一
  • 豊富なメソッドで簡単にデータ操作が可能
  • コードの再利用性と保守性が向上

特に、ListMapはよく使われるコレクションで、その理解はJavaプログラミングの基礎となります。

Listの基礎

Listは、順番があるデータの集まりを扱うコレクションです。同じ値を持つ要素を複数含めることができます。代表的な実装クラスには、ArrayListLinkedListがあります。

ArrayListの使い方と特徴

ArrayListは、可変長の配列として機能します。

特徴

  • データの読み取りが高速(get()メソッド)
  • 末尾への要素追加が高速
  • 中間の要素の追加・削除は遅い

基本的な使い方

// インポートが必要です
import java.util.ArrayList;
import java.util.List;

List list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

// 要素の取得
String language = list.get(0); // "Java"

// 要素の削除
list.remove(1); // "Python"を削除

参考 import文(パッケージの仕組み)

LinkedListの使い方と特徴

LinkedListは、データの繋がりを持つリストです。

特徴

  • データの追加・削除が高速
  • データの読み取りは遅い

基本的な使い方

// インポートが必要です
import java.util.LinkedList;
import java.util.List;

List list = new LinkedList<>();
list.add("Spring");
list.add("Summer");
list.add("Fall");

// 先頭に要素を追加
list.add(0, "Winter");

// 末尾の要素を削除
list.remove(list.size() - 1); // "Fall"を削除

Listの選び方

使い方に応じて適切なListを選ぶことが重要です。

要件おすすめのクラス
データの読み取りが多いArrayList
データの追加・削除が多いLinkedList

Mapの基礎

Mapは、キーと値の組み合わせでデータを管理するコレクションです。代表的な実装クラスには、HashMapLinkedHashMapTreeMapがあります。

HashMapの使い方と特徴

HashMapは、キーをもとにデータを素早く探せる仕組みです。

特徴

  • データの検索・追加・削除が高速
  • データの順番は保証されない
  • nullキーと値を許可

基本的な使い方

// インポートが必要です
import java.util.HashMap;
import java.util.Map;

Map map = new HashMap<>();
map.put("Apple", 100);
map.put("Banana", 80);
map.put("Orange", 90);

// 値の取得
int price = map.get("Banana"); // 80

// エントリーの削除
map.remove("Apple");

LinkedHashMapの使い方と特徴

LinkedHashMapは、データの順番を保持するMapです。

特徴

  • データの順番(追加順やアクセス順)を保持
  • HashMapよりもメモリを多く使う

基本的な使い方

// インポートが必要です
import java.util.LinkedHashMap;
import java.util.Map;

Map map = new LinkedHashMap<>();
map.put("First", 1);
map.put("Second", 2);
map.put("Third", 3);

// 順番を保持してキーを取得
for (String key : map.keySet()) {
    System.out.println(key);
}

TreeMapの使い方と特徴

TreeMapは、キーを自動的にソートして管理するMapです。

特徴

  • キーが自動的に順番(自然順序)に並ぶ
  • 操作の速度は遅め
  • nullキーは許可されない

基本的な使い方

// インポートが必要です
import java.util.Map;
import java.util.TreeMap;

Map map = new TreeMap<>();
map.put("C", 3);
map.put("A", 1);
map.put("B", 2);

// ソートされた順序でキーを取得
for (String key : map.keySet()) {
    System.out.println(key);
}

Mapの選び方

目的に応じて適切なMapを選びましょう。

要件おすすめのクラス
高速なデータ操作、順番は不要HashMap
データの順番を保持したいLinkedHashMap
キーをソートしたいTreeMap

コレクションを使う上でのポイント

インターフェース型で宣言する

変数は実装クラスではなく、インターフェース型で宣言しましょう。

// 良い例
List list = new ArrayList<>();

// 良くない例
ArrayList list = new ArrayList<>();

ジェネリクスを使って型安全に

ジェネリクスを使うことで、型の安全性を高められます。

List list = new ArrayList<>();
list.add("Sample");
// エラーになる
// list.add(123);

イミュータブルなコレクションを使う

変更しないコレクションは、イミュータブル(不変)にすると安全です。

List unmodifiableList = Collections.unmodifiableList(list);

適切なコレクションを選ぶ

データの特徴や目的に合わせて、最適なコレクションを選びましょう。

  • 重複を許さない:Set
  • 順番が大事:List
  • キーと値で管理:Map

パフォーマンス向上のコツ

初期容量を設定する

大量のデータを扱う場合、初期容量を設定すると効率が良くなります。

List list = new ArrayList<>(1000);
Map map = new HashMap<>(1000);

不要なデータを削除する

使わなくなったデータは明示的に削除し、メモリを節約しましょう。

list.clear();
map.clear();

スレッドセーフなコレクションを使う

マルチスレッド環境では、ConcurrentHashMapなどを使って安全性を確保します。

タイトルとURLをコピーしました