Arrays.asList vs new ArrayList (Arrays.asList ())

1. Áttekintés

Ebben a rövid bemutatóban megvizsgáljuk a különbségeket Arrays.asList (tömb) és ArrayList (Arrays.asList (tömb)).

2. Tömbök.asList

Kezdjük a Tömbök.asList módszer.

Ezzel a módszerrel tömbből átalakíthatunk rögzített méretűre Lista tárgy. Ez Lista csak egy burkoló, amely elérhetővé teszi a tömböt listaként. Nincs adat másolása vagy létrehozása.

Továbbá nem tudjuk módosítani a hosszát, mert elemek hozzáadása vagy eltávolítása nem megengedett.

A tömbben lévő egyes elemeket azonban módosíthatjuk. Vegye figyelembe, hogy az összes módosításokat hajtunk végre a Lista tükröződik az eredeti tömbben:

Karakterlánc [] stringArray = új karakterlánc [] {"A", "B", "C", "D"}; Lista stringList = Tömbök.asList (stringArray); 

Most nézzük meg, mi történik, ha módosítjuk a stringList:

stringList.set (0, "E"); assertThat (stringList) .containExactly ("E", "B", "C", "D"); assertThat (stringArray) .conactExactly ("E", "B", "C", "D");

Mint láthatjuk, az eredeti tömböt is módosítottuk. A lista és a tömb is pontosan ugyanazokat az elemeket tartalmazza ugyanabban a sorrendben.

Most próbáljunk meg új elemet beszúrni a stringList:

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

Ahogy látjuk, elemek hozzáadása / eltávolítása a Lista dobni fog java.lang.UnsupportedOperationException.

3. ArrayList (Arrays.asList (tömb))

Hasonló a Tömbök.asList módszer, tudjuk használni ArrayList (Arrays.asList (tömb)) amikor létre kell hoznunk a Lista egy tömbből.

De az előző példával ellentétben ez a tömb független másolata, ami azt jelenti az új lista módosítása nem befolyásolja az eredeti tömböt. Ezenkívül rendelkezünk egy törzsvendég minden képességével Tömb lista, mint elemek hozzáadása és eltávolítása:

Karakterlánc [] stringArray = új karakterlánc [] {"A", "B", "C", "D"}; List stringList = new ArrayList (Arrays.asList (stringArray)); 

Most módosítsuk a stringList:

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

Most nézzük meg, mi történt az eredeti tömbünkkel:

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

Ahogy látjuk, eredeti tömbünk érintetlen marad.

Összecsomagolás előtt, ha megnézzük a JDK forráskódját, láthatjuk a Tömbök.asList A metódus a Tömb lista hogy különbözik a java.util.ArrayList. A fő különbség az, hogy a visszatért Tömb lista csak egy meglévő tömböt csomagol be - nem hajtja végre a hozzá és eltávolítani mód.

4. Következtetés

Ebben a rövid cikkben megvizsgáltuk a tömb kétessé alakításának két módja közötti különbségeket Tömb lista. Láttuk, hogyan viselkedik ez a két lehetőség, valamint a különbség a belső tömbök megvalósításának módja között.

Mint mindig, a kódminták megtalálhatók a GitHubon.