Változhatatlan ArrayList Java-ban

1. Áttekintés

Ez a gyors bemutató megmutatja hogyan készítsünk egy Tömb lista változhatatlan a központi JDK-val, a Guava-val és végül az Apache Commons Collections 4-gyel.

Ez a cikk a „Java - Vissza az alapokhoz”Sorozat itt, a Baeldungon.

2. A JDK-val

Először is, a JDK jó módot kínál arra, hogy módosíthatatlan gyűjteményt szerezzen ki egy meglévőből:

Gyűjtemények.unmodifiableList (lista);

Az új gyűjtemény ezen a ponton már nem módosítható:

@Test (várható = UnsupportedOperationException.class) public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = Collections.unmodifiableList (list); unmodifiableList.add ("négy"); }

2.1. Java 9-el

A Java 9 óta használhatjuk a List.of (E… elemek) statikus gyári módszer egy változhatatlan lista létrehozásához:

@Test (várható = UnsupportedOperationException.class) public final void givenUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {final List list = new ArrayList (Arrays.asList ("one", "two", "three")); final List unmodifiableList = List.of (list.toArray (új karakterlánc [] {})); unmodifiableList.add ("négy"); }

Figyeljük meg, hogyan kell átalakítanunk a meglévőt lista tömbbe. Ez azért van, mert List.of (elements) elfogadja a vararg paramétereket.

3. Guavával

A Guava hasonló funkciókat kínál a saját verziójának létrehozásához ImmutableList:

ImmutableList.copyOf (lista);

Hasonlóképpen - az eredményül kapott listát nem lehet módosítani:

@Test (várható = UnsupportedOperationException.class) public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = ImmutableList.copyOf (lista); unmodifiableList.add ("négy"); }

Vegye figyelembe, hogy ez a művelet valóban megtörténik hozzon létre egy példányt az eredeti listáról, nem csak kilátás.

A Guava építõket is biztosít - ez visszaadja az erõseket ImmutableList ahelyett, hogy egyszerűen Lista:

@Test (várható = UnsupportedOperationException.class) public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (list) .build (); unmodifiableList.add ("négy"); }

4. Az Apache Collections Commons-szal

Végül a Commons Collection API-t is biztosít egy módosíthatatlan lista létrehozásához:

ListUtils.unmodifiableList (lista);

És az eredményül kapott lista módosítása ismét egy UnsupportedOperationException:

@Test (várt = UnsupportedOperationException.class) public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("egy", "kettő", "három")); List unmodifiableList = ListUtils.unmodifiableList (lista); unmodifiableList.add ("négy"); }

5. Következtetés

Ez az oktatóanyag bemutatja, hogyan lehet egyszerűen hozzon létre egy módosíthatatlan listát egy létezőből Tömb lista vagy az alap JDK, a Google Guava vagy az Apache Commons gyűjtemények használatával.

Mindezen példák és kódrészletek megvalósítása megtalálható a Githubon - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.