Javaコレクションフレーム 課題集 (全30問)

2025-08-02

初級問題 (9問)

基本的なコレクション操作

  1. ArrayListの作成: String型を格納するArrayListを作成し、3つの要素を追加してください。
  2. LinkedListの作成: Integer型を格納するLinkedListを作成し、数値を5つ追加してください。
  3. HashSetの利用: 重複要素を含む文字列をHashSetに追加し、重複が除去されることを確認してください。
  4. HashMapの基本: キーがString、値がIntegerのHashMapを作成し、3つの要素を追加してください。
  5. 要素の取得: ArrayListから特定のインデックスの要素を取得するコードを書いてください。
  6. 要素の存在確認: HashSetに特定の要素が含まれているか確認するコードを書いてください。
  7. マップからの値取得: HashMapからキーを指定して値を取得するコードを書いてください。
  8. コレクションのサイズ: ArrayListの要素数を取得するコードを書いてください。
  9. 基本的なイテレーション: for-eachループを使用してArrayListの全要素を表示してください。

中級問題 (15問)

コレクション操作の応用

  1. リストのソート: IntegerのArrayListを作成し、Collections.sort()でソートしてください。
  2. カスタムソート: 独自クラスのオブジェクトを格納したリストを、特定のフィールドでソートしてください。
  3. マップのイテレーション: HashMapのすべてのキーと値を表示してください。
  4. リストからセットへ変換: ArrayListをHashSetに変換して重複を除去してください。
  5. イテレータの使用: Iteratorを使用してLinkedListの要素をすべて表示してください。
  6. リストのフィルタリング: 数値リストから偶数のみを抽出した新しいリストを作成してください。
  7. マップの値更新: HashMapの特定のキーの値を更新してください。
  8. ネストしたコレクション: リストのリスト(二次元リスト)を作成し、データを追加してください。
  9. 不変リストの作成: Arrays.asList()で不変なリストを作成してください。
  10. コレクションのコピー: 既存のArrayListを新しいArrayListにコピーしてください。

より高度なコレクション操作

  1. ラムダ式でのソート: ラムダ式を使用してリストをソートしてください。
  2. ストリームAPIの利用: ストリームAPIを使用してリストの各要素を2倍にした新しいリストを作成してください。
  3. マップのフィルタリング: 特定の条件に合致するエントリのみを抽出した新しいマップを作成してください。
  4. ツリーマップの利用: TreeMapを使用して自動ソートされるマップを作成してください。
  5. キューとスタック: LinkedListをキューおよびスタックとして使用する例を示してください。

上級問題 (6問)

  1. カスタムコンパレータ: 独自のコンパレータを実装してリストをソートしてください。
  2. スレッドセーフなコレクション: CopyOnWriteArrayListを使用したスレッドセーフなリスト操作を示してください。
  3. enumマップの利用: EnumMapを使用してenumをキーとするマップを作成してください。
  4. WeakHashMapの理解: WeakHashMapの特性を活かした使用例を示してください。
  5. コレクションの同期化: Collections.synchronizedList()を使用してスレッドセーフなリストを作成してください。
  6. カスタムコレクションの作成: AbstractListを拡張して独自のリスト実装を作成してください。

Javaコレクションフレーム 解答例

初級問題の解答

  1. ArrayListの作成
List list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
  1. LinkedListの作成
List numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);
  1. HashSetの利用
Set set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 重複
System.out.println(set); // [A, B] のみ表示
  1. HashMapの基本
Map map = new HashMap<>();
map.put("John", 25);
map.put("Alice", 30);
map.put("Bob", 28);
  1. ArrayListからの要素の取得
List fruits = Arrays.asList("Apple", "Banana", "Orange");
String fruit = fruits.get(1); // "Banana"を取得
  1. HashSetの要素の存在確認
Set colors = new HashSet<>(Arrays.asList("Red", "Green", "Blue"));
boolean containsBlue = colors.contains("Blue"); // true
  1. HashMapからの値取得
Map ages = new HashMap<>();
ages.put("John", 25);
int johnsAge = ages.get("John"); // 25
  1. ArrayListのサイズ
List numbers = Arrays.asList(1, 2, 3, 4, 5);
int size = numbers.size(); // 5
  1. 基本的なイテレーション
List languages = Arrays.asList("Java", "Python", "C++");
for (String lang : languages) {
    System.out.println(lang);
}

中級問題の解答

  1. リストのソート
List numbers = new ArrayList<>(Arrays.asList(5, 3, 8, 1, 2));
Collections.sort(numbers);
System.out.println(numbers); // [1, 2, 3, 5, 8]
  1. カスタムソート
class Person {
    String name;
    int age;
    // コンストラクタ、ゲッター等は省略
}

List people = new ArrayList<>();
// peopleに要素を追加...
Collections.sort(people, Comparator.comparingInt(p -> p.age));
  1. マップのイテレーション
Map map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);

for (Map.Entry entry : map.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}
  1. リストからセットへ変換
List listWithDuplicates = Arrays.asList("A", "B", "A", "C");
Set set = new HashSet<>(listWithDuplicates);
System.out.println(set); // [A, B, C]
  1. イテレータの使用
List list = new LinkedList<>(Arrays.asList("A", "B", "C"));
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
  1. リストのフィルタリング
List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List evenNumbers = numbers.stream()
                                  .filter(n -> n % 2 == 0)
                                  .collect(Collectors.toList());
  1. マップの値更新
Map scores = new HashMap<>();
scores.put("John", 80);
scores.put("Alice", 90);

scores.put("John", 85); // Johnのスコアを更新
  1. ネストしたコレクション
List> matrix = new ArrayList<>();
matrix.add(Arrays.asList(1, 2, 3));
matrix.add(Arrays.asList(4, 5, 6));
matrix.add(Arrays.asList(7, 8, 9));
  1. 不変リストの作成
List immutableList = Arrays.asList("A", "B", "C");
// immutableList.add("D"); // UnsupportedOperationExceptionが発生
  1. コレクションのコピー
List original = new ArrayList<>(Arrays.asList("A", "B", "C"));
List copy = new ArrayList<>(original);
  1. ラムダ式でのソート
List names = Arrays.asList("John", "Alice", "Bob");
names.sort((a, b) -> a.compareTo(b));
  1. ストリームAPIの利用
List numbers = Arrays.asList(1, 2, 3);
List doubled = numbers.stream()
                              .map(n -> n * 2)
                              .collect(Collectors.toList());
  1. マップのフィルタリング
Map ages = new HashMap<>();
ages.put("John", 25);
ages.put("Alice", 30);
ages.put("Bob", 17);

Map adults = ages.entrySet().stream()
    .filter(entry -> entry.getValue() >= 20)
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
  1. ツリーマップの利用
Map sortedMap = new TreeMap<>();
sortedMap.put("Orange", 2);
sortedMap.put("Apple", 5);
sortedMap.put("Banana", 3);
// キーで自動ソートされる
  1. キューとスタック
// キューとして使用
Queue queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
String first = queue.poll(); // A

// スタックとして使用
Deque stack = new LinkedList<>();
stack.push("A");
stack.push("B");
String top = stack.pop(); // B

上級問題の解答

  1. カスタムコンパレータ
class Person {
    String name;
    int age;
    // コンストラクタ、ゲッター等は省略
}

class AgeComparator implements Comparator {
    @Override
    public int compare(Person p1, Person p2) {
        return Integer.compare(p1.age, p2.age);
    }
}

List people = new ArrayList<>();
// peopleに要素を追加...
Collections.sort(people, new AgeComparator());
  1. スレッドセーフなコレクション
List list = new CopyOnWriteArrayList<>();
list.add("A");
list.add("B");

// マルチスレッド環境で安全に操作可能
  1. enumマップの利用
enum Day { MONDAY, TUESDAY, WEDNESDAY }

Map schedule = new EnumMap<>(Day.class);
schedule.put(Day.MONDAY, "Meeting");
schedule.put(Day.TUESDAY, "Gym");
  1. WeakHashMapの理解
Map weakMap = new WeakHashMap<>();
Object key = new Object();
weakMap.put(key, "value");

key = null; // キーへの強参照を削除
System.gc(); // GCが発生するとエントリが削除される可能性がある
  1. コレクションの同期化
List list = Collections.synchronizedList(new ArrayList<>());

// マルチスレッド環境で使用する場合
synchronized (list) {
    Iterator i = list.iterator();
    while (i.hasNext()) {
        String item = i.next();
        // 処理...
    }
}
  1. カスタムコレクションの作成
class RangeList extends AbstractList {
    private final int start;
    private final int end;
    
    public RangeList(int start, int end) {
        this.start = start;
        this.end = end;
    }
    
    @Override
    public Integer get(int index) {
        if (index < 0 || index >= size()) {
            throw new IndexOutOfBoundsException();
        }
        return start + index;
    }
    
    @Override
    public int size() {
        return end - start + 1;
    }
}

List range = new RangeList(5, 10);
System.out.println(range); // [5, 6, 7, 8, 9, 10]