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

1. סקירה כללית

הדרכה מהירה זו תוצג איך להכין רשימת מערך בלתי ניתן לשינוי עם הליבה JDK, עם גויאבה ולבסוף עם Apache Commons Collections 4.

מאמר זה הוא חלק מה- "ג'אווה - חזרה לבסיסיסדרה כאן על באלדונג.

2. עם JDK

ראשית, ה- JDK מספק דרך נחמדה להוציא אוסף שאינו ניתן לשינוי מתוך אוסף קיים:

Collections.unmodifiableList (רשימה);

לא ניתן יהיה לשנות את האוסף החדש בשלב זה:

@Test (צפוי = לא נתמךOperationException.class) חלל ציבורי givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = ArrayList new (Arrays.asList ("one", "two", "three")); List unmodifiableList = Collections.unmodifiableList (רשימה); unmodifiableList.add ("ארבע"); }

2.1. עם Java 9

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

@Test (צפוי = לא נתמךOperationException.class) חלל סופי ציבורי נתוןUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {final list list = new ArrayList (Arrays.asList ("one", "two", "three")); רשימה סופית unmodifiableList = List.of (list.toArray (מחרוזת חדשה [] {})); unmodifiableList.add ("ארבע"); }

שימו לב כיצד עלינו להמיר את הקיים רשימה לתוך מערך. זה בגלל ש List.of (אלמנטים) מקבל פרמטרים של vararg.

3. עם גויאבה

גויאבה מספקת פונקציונליות דומה ליצירת גרסה משלה של ImmutableList:

ImmutableList.copyOf (רשימה);

באופן דומה - אין לשנות את הרשימה המתקבלת:

@Test (צפוי = לא נתמךOperationException.class) חלל ציבורי givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = ArrayList new (Arrays.asList ("one", "two", "three")); רשימה unmodifiableList = ImmutableList.copyOf (רשימה); unmodifiableList.add ("ארבע"); }

שים לב שפעולה זו אכן תעשה זאת ליצור עותק של הרשימה המקורית, לא רק נוף.

גויאבה מספקת גם בונה - זה יחזיר את החזקים ImmutableList במקום פשוט רשימה:

@Test (צפוי = לא נתמךOperationException.class) חלל ציבורי givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {List list = ArrayList new (Arrays.asList ("one", "two", "three")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (list) .build (); unmodifiableList.add ("ארבע"); }

4. עם Apache Collections Commons

לבסוף, Commons Collection מספק גם API ליצירת רשימה שלא ניתנת לשינוי:

ListUtils.unmodifiableList (רשימה);

ושוב, שינוי הרשימה המתקבלת אמור לגרום ל- לא נתמךOperationException:

@Test (צפוי = לא נתמךOperationException.class) חלל ציבורי givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = ArrayList new (Arrays.asList ("one", "two", "three")); List unmodifiableList = ListUtils.unmodifiableList (רשימה); unmodifiableList.add ("ארבע"); }

5. מסקנה

מדריך זה ממחיש כיצד לעשות זאת בקלות ליצור רשימה בלתי ניתנת לשינוי מתוך קיים רשימת מערך באמצעות אוספי הליבה JDK, Google Guava או Apache Commons.

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


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