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

1. Oversikt

I denne korte opplæringen tar vi en titt på forskjellene mellom Arrays.asList (array) og ArrayList (Arrays.asList (array)).

2. Arrays.asList

La oss starte med Arrays.asList metode.

Ved hjelp av denne metoden kan vi konvertere fra en matrise til en fast størrelse Liste gjenstand. Dette Liste er bare en innpakning som gjør matrisen tilgjengelig som en liste. Ingen data blir kopiert eller opprettet.

Vi kan heller ikke endre lengden på grunn av det er ikke tillatt å legge til eller fjerne elementer.

Vi kan imidlertid endre enkeltelementer i matrisen. Legg merke til at alle endringer vi gjør på de enkelte elementene i Liste vil gjenspeiles i vårt originale utvalg:

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

La oss nå se hva som skjer hvis vi endrer det første elementet i strengliste:

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

Som vi kan se, ble vår opprinnelige matrise også endret. Både listen og matrisen inneholder nå nøyaktig de samme elementene i samme rekkefølge.

La oss nå prøve å sette inn et nytt element i strengliste:

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

Som vi kan se, legge til / fjerne elementer til / fra Liste vil kaste java.lang.UnsupportedOperationException.

3. ArrayList (Arrays.asList (array))

I likhet med Arrays.asList metode, Vi kan bruke ArrayList (Arrays.asList (array)) når vi trenger å lage en Liste ut av en matrise.

Men i motsetning til vårt forrige eksempel er dette en uavhengig kopi av matrisen, noe som betyr at endring av den nye listen påvirker ikke den opprinnelige matrisen. I tillegg har vi alle funksjonene til en vanlig ArrayList, som å legge til og fjerne elementer:

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

La oss nå endre det første elementet i strengliste:

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

Og nå, la oss se hva som skjedde med vår opprinnelige matrise:

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

Som vi kan se, vårt originale utvalg forblir uberørt.

Før vi pakker inn, hvis vi tar en titt på JDK-kildekoden, kan vi se Arrays.asList metoden returnerer en type ArrayList som er forskjellig fra java.util.ArrayList. Hovedforskjellen er at de returnerte ArrayList bare bryter en eksisterende matrise - den implementerer ikke legge til og fjerne metoder.

4. Konklusjon

I denne korte artikkelen tok vi en titt på forskjellene mellom to måter å konvertere en matrise til en ArrayList. Vi så hvordan disse to alternativene oppfører seg og forskjellen mellom hvordan de implementerer sine interne matriser.

Som alltid kan kodeeksemplene bli funnet på GitHub.