CodeGym /בלוג Java /Random-HE /ערכת Java כממשק
John Squirrels
רָמָה
San Francisco

ערכת Java כממשק

פורסם בקבוצה
סט הוא פשוט אוסף של חפצים ייחודיים. ייחודי פירושו שלא שני אובייקטים יכולים להיות בעלי אותו ערך(ים). בהתאם ליישום הסט, ייתכן שהוא יוזמן או לא. לסט Java, כסוג נתונים מופשטים (ADT), יש כמה פעולות מפתח (כאשר T מייצג כל סוג נתונים כגון int, String או כל אובייקט מחלקה): ערכת Java כממשק - 1
  • boolean add(T item): מחזירה true אם הפריט נוסף בהצלחה לסט, ו-false אם הפריט כבר היה בסט.
  • boolean remove(T item): מחזירה true אם הפריט הוסר בהצלחה מהסט ו-false אחרת (אם הפריט לא היה בסט).
  • boolean contains(T item): מחזירה true אם הפריט נמצא בסט ו-false אחרת.
  • boolean isEmpty(): מחזירה true אם הסט ריק ו-false אחרת.
לסטים ב-Java יש חתימות פונקציות די מובנות (כפי שהן אמורות). אם תוסיף שני פריטים זהים לסט, אז רק הפריט שנוסף הראשון יהיה בסט. כל הניסיונות הבאים להוסיף את אותו פריט יתעלמו, אלא אם כן הפריט יוסר לראשונה. אחת מפעולות הסט הנפוצות ביותר היא בדיקה אם פריט נמצא בתוך סט נתון. הפונקציה contains()נותנת זמן ריצה נהדר עבור זה: O(1) או O(log n) מורכבות זמן תלוי אם המימוש המשמש הוא a HashSetאו a TreeSet, בהתאמה. אז למה עשוי סט לשמש? ובכן, אם אי פעם תצטרך לעקוב אחר אובייקטים שונים - כגון מזהים, שמות או מזהים ייחודיים אחרים - ולבדוק לעתים קרובות אם פריט קיים באוסף כזה, סביר להניח שסט הוא בחירה טובה. הנה מקרה שימוש לדוגמה של קבוצה: תאר לעצמך שיש לך רשימה של Studentאובייקטים המייצגים את כל התלמידים בכיתה נתונה. לכל אחד Studentיכול להיות שם ייחודי (מחרוזת) וציון (int) עבור הכיתה הזו. אם תרצה להפנות לרשימה של כל תלמידי א' (ציון >=90) לעתים קרובות, אז זה יהיה מייגע לעבור ברשימה זו ולבדוק את הציון של כל תלמיד בכל פעם. במקום זאת, תוכל להשתמש HashSetבמחרוזות שעוקבת אחר כל תלמידי A בכיתה, ככזו:
  • בכל פעם שציונים של התלמידים מתעדכנים, אתה יכול פשוט לבדוק אם הציון החדש של התלמיד גדול או שווה ל-90 או לא.
    • אם כן, הוסף אותם לקבוצה של תלמידי A באמצעותadd()
      • אם הם כבר היו סטודנטים א', אז פשוט מתעלמים מהפעולה הזו.
    • אם לא, הסר אותם מהקבוצה של תלמידי A באמצעותremove()
      • אם הם לא היו תלמידי א' בשלב זה, אז פשוט מתעלמים מהפעולה הזו.
עם מערכת כזו, תמיד תהיה לך קבוצה מעודכנת של כל תלמידי 'א' בכיתה שלך. אם רצית לבדוק אם ג'וני אפלסיד מצליח בכיתה שלך, תוכל לעשות זאת בקלות על ידי התקשרות contains(“Johnny Appleseed”)לסט. כמובן, זו רק דוגמה אחת למקרה שימוש עבור סט, וניתן לפתור את הבעיה הספציפית הזו של מעקב אחר תלמידי A בדרכים אחרות.

יישום: HashSet ב-Java ו-Java TreeSet דוגמאות

גם HashSetב-Java וגם TreeSetב-Java מגיעים ב- java.utils package. אתה יכול לייבא אותם ככאלה:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
אוֹ
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
ההבדל העיקרי בין ג'אווה HashSetוג'אווה TreeSetהוא שה TreeSet-ממוין, ואילו HashSetלא. זו הסיבה שיש TreeSetלו מורכבות זמן O(log n) עבור פעולות מפתח, בעוד HashSetשיש לו O(1) או מורכבות זמן קבועה; חייבים TreeSetלשמור על הסדר בכל עת. בנוסף לפעולות ערכת המפתחות שהוזכרו קודם לכן, גם ל- HashSetוגם TreeSetב-Java יש עוד כמה פונקציות מועילות:
  • void clear(): מנקה את הסט מכל האובייקטים.
  • int size(): מחזירה את מספר האובייקטים בערכה.
  • Object clone(): מחזיר עותק רדוד של הסט.
  • Iterator iterator(): מחזיר איטרטור לקבוצה, החל מהאובייקט הראשון.
אתה יכול לתאר לעצמך למצוא שימושים לפונקציות האלה בדוגמה של "רשימת סטודנטים A": אתה יכול להתקשר size()אם אתה רוצה לראות כמה תלמידים יש לך 'A', או clear()אם אתה רוצה לנקות את הרשימה בסוף הסמסטר. תוכל להשתמש clone()כדי ליצור ולשמור שיבוט של רשימת תלמידי A בנקודת זמן מסוימת, כגון במהלך דוחות אמצע (בדרך זו השיבוט לא נשאר מעודכן יחד עם המקור).

דוגמה ל-Java HashSet

הנה דוגמה קצרה של HashSets Stringבשימוש ב-Java:
import java.util.HashSet;
class HashSetDemo {
    public static void main(String[] args)
    {
	  // create a HashSet of Strings
        HashSet<String> hs = new HashSet<String>();

        // Add elements using the add() method
        hs.add("Collin");
	  hs.add("Bob");
 	  hs.add("Abigail");

        // Duplicates will ignored; this statement is useless
        hs.add("Collin");


        System.out.println(hs);
	  System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + hs.contains("Max"));


    }
}
פלט: --------

[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false

דוגמה של Java TreeSet

דוגמה של Java יכולה לעזור לך להבין את התיאוריה. הנה הדוגמה הקצרה של a TreeSetשל Strings בשימוש ב-Java:
import java.util.TreeSet;
class TreeSetDemo {
    public static void main(String[] args)
    {
	  // create a TreeSet of Strings
        TreeSet<String> ts = new TreeSet<String>();

        // Add elements using the add() method.
        ts.add("Collin");
	  ts.add("Bob");
 	  ts.add("Abigail");

        // Duplicates will ignored; this statement is useless
        ts.add("Collin");

        // printing the set prints the names in alphabetical order!
        System.out.println(ts);

	  System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
  System.out.println("Size of the set: " + ts.size());
 	  ts.clear();
	  System.out.println("Size of the set after clear(): " + ts.size());


    }
}
פלט: -------

[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
זה הכל! מקווה שזה עזר 😊
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION