Arrays.asList vs ny ArrayList (Arrays.asList ())

1. Oversigt

I denne korte tutorial tager vi et kig på forskellene mellem Arrays.asList (array) og ArrayList (Arrays.asList (array)).

2. Arrays.asList

Lad os starte med Arrays.asList metode.

Ved hjælp af denne metode kan vi konvertere fra en matrix til en fast størrelse Liste objekt. Det her Liste er bare en indpakning, der gør arrayet tilgængeligt som en liste. Ingen data kopieres eller oprettes.

Vi kan heller ikke ændre dens længde, fordi tilføjelse eller fjernelse af elementer er ikke tilladt.

Vi kan dog ændre enkelte elementer inde i arrayet. Bemærk, at alle ændringer, vi foretager på de enkelte poster i Liste vil blive afspejlet i vores oprindelige matrix:

String [] stringArray = new String [] {"A", "B", "C", "D"}; List stringList = Arrays.asList (stringArray); 

Lad os nu se, hvad der sker, hvis vi ændrer det første element i strengListe:

stringList.set (0, "E"); assertThat (stringList) .containsExactly ("E", "B", "C", "D"); assertThat (stringArray). indeholder nøjagtigt ("E", "B", "C", "D");

Som vi kan se, blev vores originale array også ændret. Både listen og arrayet indeholder nu nøjagtigt de samme elementer i samme rækkefølge.

Lad os nu prøve at indsætte et nyt element i strengListe:

stringList.add ("F");
java.lang.UnsupportedOperationException at java.base / java.util.AbstractList.add (AbstractList.java:153) på java.base / java.util.AbstractList.add (AbstractList.java:111)

Som vi kan se, tilføje / fjerne elementer til / fra Liste vil kaste java.lang.UnderstøttetOperationException.

3. ArrayList (Arrays.asList (array))

Svarende til Arrays.asList metode, vi kan bruge ArrayList (Arrays.asList (array)) når vi har brug for at oprette en Liste ud af en matrix.

Men i modsætning til vores tidligere eksempel er dette en uafhængig kopi af arrayet, hvilket betyder det ændring af den nye liste påvirker ikke den oprindelige matrix. Derudover har vi alle mulighederne for en almindelig ArrayList, som at tilføje og fjerne elementer:

String [] stringArray = new String [] {"A", "B", "C", "D"}; Liste stringList = ny ArrayList (Arrays.asList (stringArray)); 

Lad os nu ændre det første element i strengListe:

stringList.set (0, "E"); assertThat (stringList) .containsExactly ("E", "B", "C", "D");

Lad os nu se, hvad der skete med vores oprindelige array:

assertThat (stringArray) .containsExactly ("A", "B", "C", "D");

Som vi kan se, vores oprindelige matrix forbliver uberørt.

Inden vi indpakker, kan vi se JDK-kildekoden, hvis vi kigger på Arrays.asList metode returnerer en type ArrayList det er forskelligt fra java.util.ArrayList. Den største forskel er, at den returnerede ArrayList indpakker kun et eksisterende array - det implementerer ikke tilføje og fjerne metoder.

4. Konklusion

I denne korte artikel kiggede vi på forskellene mellem to måder at konvertere en matrix til en ArrayList. Vi så, hvordan disse to muligheder opfører sig, og forskellen mellem, hvordan de implementerer deres interne arrays.

Som altid kan kodeeksemplerne findes på GitHub.