🧩 Java中級コレクション編:ポケモンと実務で学ぶ便利な使い方7選
🔰 目次
- HashMapを使う場合
- LinkedHashSetで順番保証付きのSet
- TreeMapでキー順ソートされるMap
- Collectionsを使う場合
- 自然順序付けでのソートする場合(Comparable)
- Comparatorを使う場合
- Stream APIを使う場合
1. HashMapを使う場合
🎮 ポケモンの例:ポケモンと技の対応表
// ======================================
// 1. HashMap:高速アクセス・順番保証なし
// ======================================
// 🧢 ポケモンの例:ポケモンと技
import java.util.*;
public class HashMapExample {
public static void main(String[] args) {
// ポケモンの名前をキーにして、覚えている技をバリューに登録
Map<String, String> moveMap = new HashMap<>();
moveMap.put("ピカチュウ", "10まんボルト");
moveMap.put("リザードン", "かえんほうしゃ");
moveMap.put("カビゴン", "のしかかり");
// ピカチュウがどんな技を持っているか調べる
System.out.println("ピカチュウの技:" + moveMap.get("ピカチュウ"));
}
}
🟨 出力例
ピカチュウの技:10まんボルト
🛒 実務例:商品コードと商品名の対応表
// 🛒 実務例:商品コードと商品名の対応表
import java.util.*;
public class ProductHashMap {
public static void main(String[] args) {
// 商品コードをキーに、商品名をバリューに
Map<String, String> productMap = new HashMap<>();
productMap.put("A001", "りんご");
productMap.put("B002", "バナナ");
// 商品コードA001の名前を出力
System.out.println("A001の商品は:" + productMap.get("A001"));
}
}
🟨 出力例
A001の商品は:りんご
2. LinkedHashSetで順番保証付きのSet
🎮 ポケモンの例:ジムバッジの入手順
// ===================================================
// 2. LinkedHashSet:重複NG・順番保持
// ===================================================
// 🏅 ポケモンの例:ジムバッジの取得順
import java.util.*;
public class LinkedHashSetExample {
public static void main(String[] args) {
// ジムリーダーの名前を登録(順番あり・重複なし)
Set<String> badges = new LinkedHashSet<>();
badges.add("タケシ");
badges.add("カスミ");
badges.add("マチス");
// 取得順に出力
for (String badge : badges) {
System.out.println("バッジ:" + badge);
}
}
}
🟧 出力例
バッジ:タケシ
バッジ:カスミ
バッジ:マチス
🧾 実務例:訪問順の顧客記録
// ===================================================
// 2. LinkedHashSet:重複NG・順番保持
// ===================================================
// 🧾 実務例:訪問順の顧客記録
import java.util.*;
public class ClientVisitExample {
public static void main(String[] args) {
// 訪問した顧客の名前(順番を記録)
Set<String> clients = new LinkedHashSet<>();
clients.add("山田商事");
clients.add("田中建設");
clients.add("佐藤製作所");
for (String name : clients) {
System.out.println("訪問先:" + name);
}
}
}
🟧 出力例
訪問先:山田商事
訪問先:田中建設
訪問先:佐藤製作所
3. TreeMapでキー順ソートされるMap
🎮 ポケモンの例:ポケモンの図鑑番号と名前
// ===================================================
// 3. TreeMap:キー順ソート自動
// ===================================================
// 📚 ポケモンの例:図鑑番号とポケモン名
import java.util.*;
public class TreeMapExample {
public static void main(String[] args) {
// 図鑑番号(キー)で自動的にソートされる
Map<Integer, String> pokedex = new TreeMap<>();
pokedex.put(25, "ピカチュウ");
pokedex.put(6, "リザードン");
pokedex.put(1, "フシギダネ");
for (Map.Entry<Integer, String> entry : pokedex.entrySet()) {
System.out.println(entry.getKey() + "番:" + entry.getValue());
}
}
}
🟩 出力例
1番:フシギダネ
6番:リザードン
25番:ピカチュウ
📊 実務例:社員IDと名前を昇順で表示
// ===================================================
// 3. TreeMap:キー順ソート自動
// ===================================================
// 📊 実務例:社員IDと名前を昇順で表示
import java.util.*;
public class EmployeeTreeMap {
public static void main(String[] args) {
Map<String, String> employees = new TreeMap<>();
employees.put("E003", "高橋");
employees.put("E001", "佐藤");
employees.put("E002", "田中");
for (String id : employees.keySet()) {
System.out.println("社員ID: " + id + " 氏名: " + employees.get(id));
}
}
}
🟩 出力例
社員ID: E001 氏名: 佐藤
社員ID: E002 氏名: 田中
社員ID: E003 氏名: 高橋
4. Collectionsを使う場合(ソートやシャッフル)
🎲 ポケモンの例:技をランダムに選ぶ
// ===================================================
// 4. Collectionsユーティリティ:シャッフルや並べ替え
// ===================================================
// 🎲 ポケモンの例:技をランダムに選ぶ
import java.util.*;
public class CollectionsShuffleExample {
public static void main(String[] args) {
List<String> moves = Arrays.asList("10まんボルト", "でんこうせっか", "アイアンテール");
Collections.shuffle(moves); // リストの順番をランダムに
System.out.println("選ばれた技: " + moves.get(0));
}
}
🟪 出力例
選ばれた技:10まんボルト(※毎回ランダム)
🍀 実務例:抽選で当選者を決める
// ===================================================
// 4. Collectionsユーティリティ:シャッフルや並べ替え
// ===================================================
// 🍀 実務例:抽選で当選者を決める
import java.util.*;
public class LotteryExample {
public static void main(String[] args) {
List<String> users = Arrays.asList("山田", "田中", "佐藤", "高橋");
Collections.shuffle(users);
System.out.println("当選者は: " + users.get(0));
}
}
🟪 出力例
当選者は: 佐藤
5. 自然順序付けでのソートする場合(Comparable)
🎮 ポケモンの例:ポケモン名を五十音順で並べ替え
// ===================================================
// 5. Comparable:自然順序での並べ替え
// ===================================================
// 🎮 ポケモンの例:ポケモン名を五十音順で並べ替え
import java.util.*;
public class SortPokemonExample {
public static void main(String[] args) {
List<String> pokemons = Arrays.asList("ピカチュウ", "フシギダネ", "カビゴン");
Collections.sort(pokemons); // 自然順(文字列の昇順)
for (String name : pokemons) {
System.out.println(name);
}
}
}
🟨 出力例
カビゴン
ピカチュウ
フシギダネ
📂 実務例:商品名をアルファベット順で並べる
// ===================================================
// 5. Comparable:自然順序での並べ替え
// ===================================================
// 📂 実務例:商品名をアルファベット順で並べる
import java.util.*;
public class ProductSortExample {
public static void main(String[] args) {
List<String> items = Arrays.asList("Apple", "Banana", "Carrot");
Collections.sort(items);
for (String item : items) {
System.out.println(item);
}
}
}
🟨 出力例
Apple
Banana
Carrot
6. Comparatorを使う場合
🧮 実務例:ポケモンの文字数で並べる
// ===================================================
// 6. Comparator:独自ルールでソート
// ===================================================
// 🧮 実務例:ポケモンの文字数で並べる
import java.util.*;
public class NameLengthSortExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("ピカチュー", "ピチュー", "パモ");
names.sort(Comparator.comparingInt(String::length));
for (String name : names) {
System.out.println(name);
}
}
}
🟥 出力例
パモ
ピチュー
ピカチュー
🧮 実務例:顧客名の文字数で並べる
// ===================================================
// 6. Comparator:独自ルールでソート
// ===================================================
// 🧮 実務例:顧客名の文字数で並べる
import java.util.*;
public class NameLengthSortExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("佐藤", "田中太郎", "鈴木一郎");
names.sort(Comparator.comparingInt(String::length));
for (String name : names) {
System.out.println(name);
}
}
}
🟥 出力例
佐藤
鈴木一郎
田中太郎
7. Stream APIを使う場合
🎮 ポケモンの例:HP100以上のポケモンだけを抽出
// ===================================================
// 7. Stream API:絞り込み・集計・加工など
// ===================================================
// 🎮 ポケモンの例:HP100以上のポケモンだけを抽出
import java.util.*;
import java.util.stream.*;
class Pokemon {
String name;
int hp;
Pokemon(String name, int hp) {
this.name = name;
this.hp = hp;
}
}
public class StreamPokemonExample {
public static void main(String[] args) {
List<Pokemon> team = Arrays.asList(
new Pokemon("ピカチュウ", 90),
new Pokemon("リザードン", 120),
new Pokemon("カビゴン", 160)
);
team.stream()
.filter(p -> p.hp >= 100) // HP100以上を抽出
.forEach(p -> System.out.println(p.name + "(HP: " + p.hp + ")"));
}
}
🟦 出力例
リザードン(HP: 120)
カビゴン(HP: 160)
🏢 実務例:時給1000円以上のスタッフだけを抽出
// ===================================================
// 7. Stream API:絞り込み・集計・加工など
// ===================================================
// 🏢 実務例:時給1000円以上のスタッフだけを抽出
import java.util.*;
import java.util.stream.*;
class Staff {
String name;
int wage;
Staff(String name, int wage) {
this.name = name;
this.wage = wage;
}
}
public class StreamStaffExample {
public static void main(String[] args) {
List<Staff> staffList = Arrays.asList(
new Staff("山田", 950),
new Staff("田中", 1200),
new Staff("佐藤", 1050)
);
staffList.stream()
.filter(s -> s.wage >= 1000)
.forEach(s -> System.out.println(s.name + "(時給: " + s.wage + "円)"));
}
}
🟦 出力例
田中(時給: 1200円)
佐藤(時給: 1050円)
🧠 まとめ
機能・API | 主な用途 | 特徴 |
---|---|---|
HashMap | 素早く情報取得したいとき | 高速アクセス・順番保証なし |
LinkedHashSet | 順番も大切な重複なし集合 | 重複NG・順番保持 |
TreeMap | キー順で自動ソートしたいとき | キー順ソート自動 |
Collections | ソート・シャッフルなど便利機能 | ユーティリティ系メソッドが豊富 |
Comparable | 自然順(文字・数値)ソート | 自然順序(例:あいうえお順) |
Comparator | 独自ルールで並べ替えたい | 柔軟なカスタムソート |
Stream API | 絞り込み・集計・加工 | 宣言的でスマートに操作可能 |