前回はJavaの基本的な型や制御フローについて学んだよね。今回は、Java開発においてとっても便利で、ほとんどのプロジェクトでお世話になる「java.utilパッケージ」について深掘りしていくよ。このパッケージ、まさにJava開発者の強い味方なんだ!
java.utilパッケージって何?
「java.util」は、その名の通り「ユーティリティ(便利機能)」を提供するJavaの標準パッケージなんだ。プログラミングをしてると、よく使うけど自分でイチから実装するのは面倒くさい、そんな機能がたくさんあるよね? 例えば、リストの管理、日付や時刻の操作、ランダムな数値の生成なんかがそうだ。
そんな「かゆいところに手が届く」機能が、このjava.utilパッケージにぎっしり詰まっているんだ。これらを使いこなせると、コードがもっと短く、もっと分かりやすくなるし、何より開発効率がグンと上がるんだよ。
コレクションフレームワークの心臓部!
java.utilパッケージの目玉と言えば、やっぱり「コレクションフレームワーク」だね! これを使えば、データの集まり(コレクション)を効率的に扱えるようになるんだ。代表的なものを見ていこう!
List:順番が大事なデータの並び
Listは、データの順番が重要なときに使うんだ。例えば、スーパーの買い物リストみたいに、追加した順番に並んでてほしいときに便利だよ。同じ値が複数あっても大丈夫。
よく使うクラス
ArrayList: 最もよく使うListの実装だよ。配列をベースにしてるから、データの追加や取得が速いのが特徴だ。
import java.util.ArrayList; import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
// 文字列のリストを作成
List<String> fruits = new ArrayList<>();
// データを追加
fruits.add("りんご"); // 0番目
fruits.add("バナナ"); // 1番目
fruits.add("みかん"); // 2番目
fruits.add("りんご"); // 同じデータもOK
System.out.println("フルーツリスト: " + fruits); // [りんご, バナナ, みかん, りんご]
// 特定の要素を取得
String firstFruit = fruits.get(0);
System.out.println("最初のフルーツ: " + firstFruit); // りんご
// リストのサイズを取得
System.out.println("リストのサイズ: " + fruits.size()); // 4
// 要素を削除
fruits.remove("バナナ"); // "バナナ" を削除
System.out.println("バナナ削除後のリスト: " + fruits); // [りんご, みかん, りんご]
// 特定のインデックスの要素を削除
fruits.remove(0); // 0番目の要素(りんご)を削除
System.out.println("0番目削除後のリスト: " + fruits); // [みかん, りんご]
// リストが空かどうか確認
System.out.println("リストは空?: " + fruits.isEmpty()); // false
// 全ての要素をクリア
fruits.clear();
System.out.println("全クリア後のリスト: " + fruits); // []
System.out.println("リストは空?: " + fruits.isEmpty()); // true
}
}
```
LinkedList: データの追加や削除が頻繁に行われる場合に強いんだ。データの参照はArrayListより遅くなる傾向があるよ。

vscodeで実行した結果
Java
import java.util.LinkedList;
import java.util.List;
public class LinkedListExample {
public static void main(String[] args) {
List<String> tasks = new LinkedList<>();
tasks.add("報告書作成");
tasks.add("会議準備");
tasks.add("メール返信");
System.out.println("今日のタスク: " + tasks); // [報告書作成, 会議準備, メール返信]
tasks.add(1, "資料修正"); // 1番目の位置に挿入
System.out.println("タスク追加後: " + tasks); // [報告書作成, 資料修正, 会議準備, メール返信]
tasks.removeLast(); // 最後の要素を削除
System.out.println("最後のタスク削除後: " + tasks); // [報告書作成, 資料修正, 会議準備]
}
}

vscodeで実行した結果
Set:重複を許さない集合体
Setは、数学の「集合」と同じように、重複するデータを持たないのが特徴だよ。順序は保証されないことが多いから、重複させたくないデータを管理するのにピッタリ!
よく使うクラス
・HashSet: 最もよく使うSetの実装。データの追加や検索がとても速いんだ。
Java
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) { // 整数のセットを作成
Set<Integer> uniqueNumbers = new HashSet<>(); // データを追加
uniqueNumbers.add(10);
uniqueNumbers.add(20);
uniqueNumbers.add(30);
uniqueNumbers.add(20); // 重複するデータは追加されない
System.out.println("ユニークな数字: " + uniqueNumbers); // [20, 10, 30] (順序は保証されない)
// 要素が含まれているか確認
System.out.println("10は含まれる?: " + uniqueNumbers.contains(10)); // true
System.out.println("50は含まれる?: " + uniqueNumbers.contains(50)); // false
// 要素を削除
uniqueNumbers.remove(20);
System.out.println("20削除後: " + uniqueNumbers); // [10, 30]
}
}

vscodeで実行した結果
・TreeSet: データを自動的にソートしてくれるSet。要素が常に昇順に保たれるよ。
Java
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> sortedNames = new TreeSet<>();
sortedNames.add("田中");
sortedNames.add("佐藤");
sortedNames.add("鈴木");
sortedNames.add("佐藤"); // 重複は無視される
System.out.println("ソートされた名前: " + sortedNames); // [佐藤, 鈴木, 田中]
}
}

vscodeで実行した結果
Map:キーと値のペアで管理
Mapは、キーと値のペアでデータを管理するんだ。まるで辞書みたいに、キーワード(キー)から意味(値)を引くイメージだね。キーは重複できないけど、値は重複してもOKだよ。
よく使うクラス
・HashMap: 最もよく使うMapの実装。データの追加、取得、削除が速いのが特徴だよ。
Java
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
// ユーザーIDとユーザー名のマップを作成
Map<Integer, String> users = new HashMap<>(); // データを追加
users.put(101, "Alice");
users.put(102, "Bob");
users.put(103, "Charlie");
users.put(102, "Bobby"); // キーが同じ場合は値が上書きされる
System.out.println("ユーザーマップ: " + users); // {101=Alice, 102=Bobby, 103=Charlie}
// キーを使って値を取得
String userName = users.get(101);
System.out.println("ID 101のユーザー名: " + userName); // Alice
// 存在しないキーを検索
String unknownUser = users.get(999);
System.out.println("ID 999のユーザー名: " + unknownUser); // null
// キーが存在するか確認 System.out.println("ID 103は存在するか?: " + users.containsKey(103)); // true
// 値が存在するか確認
System.out.println("Charlieは存在するか?: " + users.containsValue("Charlie")); // true
// キーと値のペアを削除
users.remove(103);
System.out.println("ID 103削除後: " + users); // {101=Alice, 102=Bobby}
// 全てのキーをループ処理
System.out.println("全てのキー:");
for (Integer id : users.keySet()) {
System.out.println(id);
}
// 全ての値をループ処理
System.out.println("全ての値:");
for (String name : users.values()) {
System.out.println(name);
}
// 全てのキーと値のペアをループ処理
System.out.println("全てのキーと値:");
for (Map.Entry<Integer, String> entry : users.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}

vscodeで実行した結果
・TreeMap: キーを自動的にソートしてくれるMap。キーの順序が重要な場合に便利だね。
Java
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, String> glossary = new TreeMap<>();
glossary.put("Java", "オブジェクト指向プログラミング言語");
glossary.put("JVM", "Java仮想マシン");
glossary.put("JDK", "Java開発キット");
System.out.println("用語集 (ソート済み): " + glossary); // {JDK=Java開発キット, JVM=Java仮想マシン, Java=オブジェクト指向プログラミング言語}
}
}
その他の便利なクラスたち
java.utilパッケージには、コレクションフレームワーク以外にも便利なクラスがたくさんあるんだ!いくつかピックアップして紹介するね。
DateとCalendar:日付と時刻の操作
日付や時刻を扱うためのクラスだよ。Dateは特定の瞬間を表し、Calendarは日付の計算や操作に便利なんだ。ただし、Java 8以降はjava.timeパッケージ(新しい日付と時刻API)の利用が推奨されているから、そちらもチェックしてみてね!
Java
import java.util.Calendar;
import java.util.Date;
public class DateTimeExample {
public static void main(String[] args) {
// 現在の日付と時刻を取得
Date now = new Date();
System.out.println("現在の日時 (Date): " + now);
// Calendarクラスを使って日付を操作
Calendar cal = Calendar.getInstance();
System.out.println("現在の日時 (Calendar): " + cal.getTime()); // Dateオブジェクトに変換
// 特定の日付を設定
cal.set(2025, Calendar.DECEMBER, 25); // 2025年12月25日
System.out.println("設定した日時: " + cal.getTime());
// 日付の加算・減算
cal.add(Calendar.DAY_OF_MONTH, 7); // 7日後
System.out.println("7日後: " + cal.getTime());
cal.add(Calendar.MONTH, -1); // 1ヶ月前
System.out.println("1ヶ月前: " + cal.getTime());
}
}
Random:ランダムな数値を生成
ゲームやシミュレーションなんかで、ランダムな数値が必要になることってあるよね? そんなときにRandomクラスが活躍するんだ。
Java
import java.util.Random;
public class RandomExample {
public static void main(String[] args) {
Random random = new Random();
// 0から9までのランダムな整数を生成
int randomNumber = random.nextInt(10);
System.out.println("0から9のランダムな数字: " + randomNumber);
// 1から100までのランダムな整数を生成 (100を含まない場合)
int randomNumber1to99 = random.nextInt(99) + 1; // nextInt(上限) で 0 から 上限-1 までが生成される
System.out.println("1から99のランダムな数字: " + randomNumber1to99);
// 1から100までのランダムな整数を生成 (100を含む場合)
int randomNumber1to100 = random.nextInt(100) + 1;
System.out.println("1から100のランダムな数字: " + randomNumber1to100);
// ランダムな真偽値 (true/false) を生成
boolean randomBoolean = random.nextBoolean();
System.out.println("ランダムな真偽値: " + randomBoolean);
// ランダムな浮動小数点数 (0.0以上1.0未満) を生成
double randomDouble = random.nextDouble();
System.out.println("0.0以上1.0未満のランダムな小数: " + randomDouble);
}
}
Scanner:標準入力からのデータ読み込み
コンソールからユーザーが入力したデータを読み込むときに使うのがScannerクラスだ。簡単な入力を受け取るのに便利だよ。
Java
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 標準入力から読み込むScannerを作成
System.out.print("あなたの名前を入力してください: ");
String name = scanner.nextLine(); // 一行読み込み
System.out.print("あなたの年齢を入力してください: ");
int age = scanner.nextInt(); // 整数を読み込み
System.out.println("こんにちは、" + name + "さん! あなたは" + age + "歳ですね。");
scanner.close(); // Scannerを閉じないとリソースリークの原因になる
}
}
まとめ
java.utilパッケージは、Javaプログラミングの効率を劇的に向上させてくれる、まさに「道具箱」のような存在なんだ。特にコレクションフレームワークは、Java開発では避けて通れないほど重要だよ。
- List: データの順序が大事で、重複もOKな場合。
ArrayListが基本。 - Set: 重複しないデータが必要な場合。
HashSetが基本。 - Map: キーと値のペアでデータを管理したい場合。
HashMapが基本。
最初は覚えることがたくさんあるように感じるかもしれないけど、実際にコードを書いて使ってみることで、その便利さが実感できるはずだ。それぞれのクラスがどんなときに役立つのか、例を参考にしながら色々なパターンで試してみてね!
次回は、Javaでファイルやネットワークを扱うときに使う「java.ioパッケージ」について解説していくよ!


コメント