Menu
CoddyTech

المسح والنسخ

جزء من قسم المنطق وتدفق التنفيذ في رحلة Java على Coddy. الدرس 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() نوعًا عامًا هو Object، وليس نوعًا محددًا مثل HashSet<String>. وذلك لأن clone() معرّفة في الفئة Object ولا تعرف نوع الكائن الذي تنسخه.

// ما تُرجعه clone():
Object cloneResult = set.clone();  // تُرجع Object، وليس HashSet<String>

// ما نحتاج إليه:
HashSet<String> clonedSet = (HashSet<String>) set.clone();  // حوِّل النوع من Object إلى HashSet<String>

يخبر التحويل Java: "أعرف أن هذا الـ Object هو في الواقع HashSet<String>، لذا تعامل معه على هذا الأساس."

من دون التحويل، ستحصل على خطأ في الترجمة البرمجية لأن Java لن تحوّل Object تلقائيًا إلى HashSet<String>.

challenge icon

التحدي

سهل

أنشئ طريقة باسم processSet تأخذ HashSet من السلاسل النصية كمدخل. يجب أن تقوم الطريقة بما يلي:

  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 عبر الإنترنت