Menu
CoddyTech

クリアとクローン

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);
// 出力: [Coddy]

セットを空にするには:

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

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

プリミティブ型でのキャスト(int x = (int) 3.14 など)については、すでに学びました。同じ考え方がオブジェクトにも当てはまりますが、その理由は異なります。

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

// clone() が返すもの:
Object cloneResult = set.clone();  // HashSet<String> ではなく Object を返す

// 必要なもの:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // Object を HashSet<String> にキャストする

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

キャストがないと、JavaはObjectをHashSet<String>に自動的に変換しないため、コンパイルエラーが発生します。

challenge icon

チャレンジ

簡単

入力として文字列のHashSetを受け取る、processSetという名前のメソッドを作成してください。このメソッドでは、次の処理を行います。

  1. セットを複製します。
  2. 元のセットをクリアします。
  3. 複製したセットとそのサイズを、次の形式で出力します。
    Cloned Set: [elements]
    Cloned Set Size: X
  4. 元のセット(クリア後)とそのサイズを、次の形式で出力します。
    Original Set after clear: [elements]
    Original Set Size: Y

自分で試してみよう

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腕試し

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

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

自分で練習してみよう: Javaオンラインコンパイラ