סט בלתי משתנה בג'אווה

1. הקדמה

במדריך זה, אנו נבחן דרכים שונות לבניית מערך בלתי משתנה בג'אווה.

אך ראשית, בואו נבין את הסט הבלתי ניתן לשינוי ונראה מדוע אנו זקוקים לו.

2. מהי סט בלתי ניתן לשינוי?

בכללי, אובייקט בלתי משתנה לא ישנה את מצבו הפנימי ברגע שניצור אותו. זה הופך אותו לבטוח חוטים כברירת מחדל. אותו היגיון חל על סטים בלתי ניתנים לשינוי.

נניח שיש לנו HashSet מופע עם כמה ערכים. הפיכתו לבלתי משתנה תיצור גרסת "קריאה בלבד" של הסט שלנו. לכן, כל ניסיון לשנות את מצבו יזרוק לא נתמךOperationException.

אז למה אנחנו צריכים את זה?

אין ספק, מקרה השימוש הנפוץ ביותר של סט בלתי משתנה הוא סביבה רבת-הברגה. לכן, אנו יכולים לחלוק נתונים בלתי ניתנים לשינוי על פני האשכולות מבלי לדאוג לסינכרון.

בינתיים יש לזכור נקודה חשובה: immutability נוגע רק לסט ולא לאלמנטים שלו. יתר על כן, אנו יכולים לשנות את הפניות המופע של רכיבי הסט ללא בעיה.

3. צור ערכות בלתי ניתנות לשינוי ב- Core Java

רק עם שיעורי הליבה של Java העומדים לרשותנו, אנו יכולים להשתמש ב- אוספים.unmodifiableSet () שיטה לעטוף את המקור מַעֲרֶכֶת.

ראשית, בואו ליצור פשוט HashSet למשל, אתחל אותו באמצעות חוּט ערכים:

Set set = HashSet חדש (); set.add ("קנדה"); set.add ("ארה"ב");

לאחר מכן, בואו נסכם את זה אוספים.unmodifiableSet ():

Set unmodifiableSet = Collections.unmodifiableSet (set);

לבסוף, כדי לוודא שלנו unmodifiable הגדר המופע אינו ניתן לשינוי, בואו ליצור מקרה מבחן פשוט:

@Test (צפוי = UnsupportedOperationException.class) public void testUnmodifiableSet () {// ליצור ולאתחל את המופע שנקבע Set unmodifiableSet = Collections.unmodifiableSet (set); unmodifiableSet.add ("קוסטה ריקה"); }

כפי שאנו מצפים, הבדיקה תפעל בהצלחה. יתר על כן, ה לְהוֹסִיף() פעולה אסורה בתאריך ה- unmodifiableSet למשל ויזרוק לא נתמךOperationException.

עכשיו בואו נשנה את ההתחלה מַעֲרֶכֶת למשל על ידי הוספת אותו ערך אליו:

set.add ("קוסטה ריקה");

בדרך זו אנו משנים בעקיפין את הסט הבלתי ניתן לשינוי. אז כשאנחנו מדפיסים את unmodifiable הגדר למשל:

[קנדה, ארה"ב, קוסטה ריקה]

כפי שאנו רואים, "קוסטה ריקה" פריט נמצא גם ב unmodifiable הגדר.

4. צור ערכות בלתי ניתנות לשינוי ב- Java 9

מאז Java 9, ה- Set.of (אלמנטים) שיטת מפעל סטטית זמינה ליצירת סטים ללא שינוי:

Set immutable = Set.of ("קנדה", "ארה"ב");

5. צור סטים בלתי ניתנים לשינוי בגויאבה

דרך נוספת בה אנו יכולים לבנות סט בלתי משתנה היא באמצעות הגויאבה ImmutableSet מעמד. הוא מעתיק את הנתונים הקיימים למופע בלתי משתנה חדש. כתוצאה מכך, הנתונים בפנים ImmutableSet לא ישתנה כאשר נשנה את המקור מַעֲרֶכֶת.

כמו יישום הליבה של Java, כל ניסיון לשנות את המופע שאינו ניתן לשינוי שנוצר לא נתמךOperationException.

עכשיו, בואו נבדוק דרכים שונות ליצירת מקרים בלתי ניתנים לשינוי.

5.1. באמצעות ImmutableSet.העתק של()

במילים פשוטות, ה ImmutableSet.העתק של() השיטה מחזירה עותק של כל האלמנטים בערכה:

Set immutable = ImmutableSet.copyOf (set);

לכן, לאחר שינוי הסט הראשוני, המופע הבלתי ניתן לשינוי יישאר זהה:

[קנדה, ארה"ב]

5.2. באמצעות ImmutableSet.שֶׁל()

באופן דומה, עם ImmutableSet.of () שיטה שנוכל ליצור באופן מיידי סט בלתי משתנה עם הערכים הנתונים:

Set immutable = ImmutableSet.of ("קנדה", "ארה"ב");

כאשר איננו מציינים רכיבים כלשהם, ה- ImmutableSet.of () יחזיר סט בלתי משתנה ריק.

ניתן להשוות זאת ל- Java 9 מַעֲרֶכֶת.שֶׁל().

6. מסקנה

במאמר מהיר זה דנו בבלתי משתנה סטים בשפת Java. יתר על כן, הראינו כיצד ליצור שינוי סטים באמצעות API של אוספים מ- Java הליבה, Java 9 וספריית Guava.

לבסוף, כרגיל, הקוד השלם למאמר זה זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found