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.