Uforanderlig ArrayList i Java

1. Oversikt

Denne raske opplæringen vil vises hvordan lage en ArrayList uforanderlig med kjernen JDK, med Guava og til slutt med Apache Commons Collections 4.

Denne artikkelen er en del avJava - Tilbake til Basic”-Serien her på Baeldung.

2. Med JDK

For det første gir JDK en fin måte å få en umodifiserbar samling ut av en eksisterende:

Collections.unmodifiableList (liste);

Den nye samlingen skal ikke lenger kunne endres på dette tidspunktet:

@Test (forventet = Ikke støttetOperationException.class) offentlig ugyldig givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); List unmodifiableList = Collections.unmodifiableList (liste); unmodifiableList.add ("fire"); }

2.1. Med Java 9

Siden Java 9 kan vi bruke en List.of (E… -elementer) statisk fabrikkmetode for å lage en uforanderlig liste:

@Test (forventet = ikke støttetOperationException.class) offentlig endelig ugyldighet gittUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable () {final List list = new ArrayList (Arrays.asList ("one", "two", "three")); final List unmodifiableList = List.of (list.toArray (ny streng [] {})); unmodifiableList.add ("fire"); }

Legg merke til hvordan vi må konvertere det eksisterende liste inn i en matrise. Dette er fordi List.of (elementer) godtar vararg-parametere.

3. Med Guava

Guava gir lignende funksjonalitet for å lage sin egen versjon av ImmutableList:

ImmutableList.copyOf (liste);

På samme måte - den resulterende listen skal ikke kunne endres:

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

Merk at denne operasjonen faktisk vil lage en kopi av originallisten, ikke bare en visning.

Guava gir også en byggmester - dette vil returnere de sterke typene ImmutableList i stedet for rett og slett Liste:

@Test (forventet = UnsupportedOperationException.class) offentlig ugyldig givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); ImmutableList unmodifiableList = ImmutableList.builder (). AddAll (liste) .build (); unmodifiableList.add ("fire"); }

4. Med Apache Collections Commons

Endelig gir Commons Collection også et API for å lage en umodifiserbar liste:

ListUtils.unmodifiableList (liste);

Og igjen, endring av den resulterende listen bør resultere i en Ikke-støttetOperationException:

@Test (forventet = UnsupportedOperationException.class) offentlig ugyldig givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable () {List list = new ArrayList (Arrays.asList ("one", "two", "three")); List unmodifiableList = ListUtils.unmodifiableList (liste); unmodifiableList.add ("fire"); }

5. Konklusjon

Denne opplæringen illustrerer hvordan du enkelt kan lage en umodifiserbar liste ut av en eksisterende ArrayList bruker enten kjernen JDK, Google Guava eller Apache Commons Collections.

Implementeringen av alle disse eksemplene og kodebiter finner du på Github - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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