ניקוי ושכפול
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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>.
אתגר
קלצור מתודה בשם <strong>processSet</strong> שמקבלת 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מערכים רב־ממדיים
יסודות מערכים דו־ממדייםגישה לאיברים במערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםסיכום — מערכים דו־ממדייםחיבור וחיסור מטריצותמערכים מדורגיםמערכים תלת־ממדיים ומעבר להםתבניות נפוצות במערכים דו־ממדייםסיכום — כל מה שצריך לדעת על מערכים4HashSet חלק 1
מהו HashSet?הוספת איברהסרת איברבדיקה אם איבר קייםבדיקת ריקנות וגודלניקוי ושכפולסיכום - HashSetתרגלו בעצמכם: קומפיילר Java אונליין