Menu
Coddy logo textTech

クリアとクローン

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 27/59。

clear() メソッドは HashSet からすべての要素を削除し、空にします。

clone() メソッドは HashSet のシャローコピー(要素自体はクローンされません)を返します。

例えば、まず HashSet を作成します:

HashSet<String> set = new HashSet<>();
set.add("Coddy");

セットをクローンするには:

HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Output: [Coddy]

セットをクリアするには:

set.clear();
System.out.println(set.isEmpty());
// Output: true

なぜ clone() でキャストが必要なのか?

あなたはすでにプリミティブ型でのキャスト(例: int x = (int) 3.14)について学びました。オブジェクトにも同じ概念が適用されますが、理由は異なります。

clone() メソッドは、特定の HashSet<String> ではなく、汎用の Object 型を返します。これは、clone()Object クラスで定義されており、クローンしている型を知らないためです。

// What clone() returns:
Object cloneResult = set.clone();  // Returns Object, not HashSet<String>

// What we need:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Cast Object → HashSet<String>

キャストは Java に伝えます:「この Object は実際には HashSet<String> なので、それをそのように扱ってください。」

キャストがないと、コンパイルエラーが発生します。なぜなら Java は ObjectHashSet<String> に自動的に変換しないからです。

challenge icon

チャレンジ

簡単

<strong>processSet</strong> という名前のメソッドを作成してください。このメソッドは String の HashSet を入力として受け取ります。メソッドは以下を行うべきです:

  1. セットをクローンする。
  2. 元のセットをクリアする。
  3. クローンされたセットとそのサイズを次の形式で出力する:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. クリア後の元のセットとそのサイズを次の形式で出力する:
    Original Set after clear: [elements]
    Original Set Size: Y

チートシート

clear() メソッドは HashSet からすべての要素を削除します:

set.clear();

clone() メソッドは HashSet の浅いコピーを返します:

HashSet<String> clonedSet = (HashSet<String>) set.clone();

キャストが必要な理由: clone() メソッドは汎用的な Object 型を返すため、特定の型として使用するには HashSet<String> にキャストする必要があります。

使用例:

HashSet<String> set = new HashSet<>();
set.add("Coddy");

// Clone the set (cast Object → HashSet<String>)
HashSet<String> clonedSet = (HashSet<String>) set.clone();

// Clear original set
set.clear();
System.out.println(set.isEmpty()); // Output: true
System.out.println(clonedSet);      // Output: [Coddy] (clone unaffected)

自分で試してみよう

import java.util.HashSet;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@SuppressWarnings("unchecked")

public class Main {
    public static void processSet(HashSet<String> set) {
        // ここにコードを記述してください
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String setString = scanner.nextLine();
        
        Type setType = new TypeToken<HashSet<String>>(){}.getType();
        HashSet<String> set = new Gson().fromJson(setString, setType);
        
        processSet(set);
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン