Immutable ArrayList v Jave

1. Prehľad

Tento rýchly tutoriál sa ukáže ako urobiť ArrayList nemenný s jadrom JDK, s Guavou a nakoniec s Apache Commons Collections 4.

Tento článok je súčasťou „Java - späť na základné”Séria tu na Baeldungu.

2. S JDK

Po prvé, JDK poskytuje pekný spôsob, ako získať neupraviteľnú zbierku z existujúcej:

Collections.unmodifiableList (zoznam);

V tomto okamihu by už novú kolekciu nebolo možné upravovať:

@Test (expect = UnsupportedOperationException.class) public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); List unmodifiableList = Collections.unmodifiableList (zoznam); unmodifiableList.add ("štyri"); }

2.1. S programom Java 9

Od verzie Java 9 môžeme používať a Zoznam (E… prvkov) statická továrenská metóda na vytvorenie nemenného zoznamu:

@Test (očakáva sa = UnsupportedOperationException.class) verejné konečné neplatné danéUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {final List list = new ArrayList (Arrays.asList ("one", "two", "three")); final List unmodifiableList = List.of (list.toArray (nový reťazec [] {})); unmodifiableList.add ("štyri"); }

Všimnite si, ako musíme previesť existujúce zoznam do poľa. To je preto, že Zoznam (prvkov) akceptuje varargové parametre.

3. S Guavou

Guava poskytuje podobné funkcie na vytvorenie vlastnej verzie prehliadača ImmutableList:

ImmutableList.copyOf (zoznam);

Podobne - výsledný zoznam by nemal byť upraviteľný:

@Test (expect = UnsupportedOperationException.class) public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); List unmodifiableList = ImmutableList.copyOf (zoznam); unmodifiableList.add ("štyri"); }

Upozorňujeme, že táto operácia skutočne bude vytvorte kópiu pôvodného zoznamu, nielen pohľad.

Guava tiež poskytuje staviteľ - tým sa vráti silný typ ImmutableList namiesto jednoducho Zoznam:

@Test (expect = UnsupportedOperationException.class) public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (list) .build (); unmodifiableList.add ("štyri"); }

4. S Apache Collections Commons

Na záver Commons Collection poskytuje aj API na vytvorenie nemodifikovateľného zoznamu:

ListUtils.unmodifiableList (zoznam);

Výsledkom úpravy výsledného zoznamu by malo byť znova UnsupportedOperationException:

@Test (expect = UnsupportedOperationException.class) public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); List unmodifiableList = ListUtils.unmodifiableList (zoznam); unmodifiableList.add ("štyri"); }

5. Záver

Tento návod ukazuje, ako ľahko vytvoriť nemodifikovateľný zoznam z existujúceho ArrayList pomocou základných JDK, Google Guava alebo Apache Commons Collections.

Implementácia všetkých týchto príkladov a útržkov kódu nájdete na Githube - toto je projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.


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