المسح والنسخ
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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>.
التحدي
سهلأنشئ طريقة باسم processSet تأخذ HashSet من السلاسل النصية كمدخل. يجب أن تقوم الطريقة بما يلي:
- استنسخ المجموعة.
- أفرغ المجموعة الأصلية.
- اطبع المجموعة المستنسخة وحجمها بالتنسيق:
Cloned Set: [elements]Cloned Set Size: X - اطبع المجموعة الأصلية (بعد إفراغها) وحجمها بالتنسيق:
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);
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات4HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمالمسح والنسخملخص - HashSet2HashMap الجزء الأول
ما هو الـ HashMap؟تعريف الـ HashMapالوصول إلى القيمالتحقق من وجود المفتاحتعديل القواميسملخص - HashMap3HashMap الجزء الثاني
دوال HashMapالتكرار باستخدام keySet()التكرار باستخدام entrySet()HashMap متداخلمراجعة - إدارة المستودعمراجعة - عمليات HashMap6التحكم المتقدم في تدفق البرنامج
العبارات المعنونةتعبير Switchمطابقة الأنماطجمل الحمايةمراجعة - تدفق التحكمتدرّب بنفسك: مترجم Java عبر الإنترنت