Arrays.asList versus nieuwe ArrayList (Arrays.asList ())

1. Overzicht

In deze korte tutorial bekijken we de verschillen tussen Arrays.asList (matrix) en ArrayList (Arrays.asList (array)).

2. Arrays.asList

Laten we beginnen met de Arrays.asList methode.

Met behulp van deze methode kunnen we van een array naar een vaste grootte converteren Lijst voorwerp. Dit Lijst is slechts een wrapper die de array beschikbaar maakt als een lijst. Er worden geen gegevens gekopieerd of gemaakt.

We kunnen de lengte ook niet wijzigen omdat het toevoegen of verwijderen van elementen is niet toegestaan.

We kunnen echter enkele items in de array wijzigen. Merk op dat alle wijzigingen die we aanbrengen in de afzonderlijke items van de Lijst zal worden weerspiegeld in onze originele reeks:

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

Laten we nu eens kijken wat er gebeurt als we het eerste element van stringList:

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

Zoals we kunnen zien, is onze oorspronkelijke array ook gewijzigd. Zowel de lijst als de array bevatten nu exact dezelfde elementen in dezelfde volgorde.

Laten we nu proberen een nieuw element in te voegen in stringList:

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

Zoals we kunnen zien, toevoegen / verwijderen van elementen aan / van het Lijst zal gooien java.lang.UnsupportedOperationException.

3. ArrayList (Arrays.asList (array))

Net als bij de Arrays.asList methode, we kunnen gebruiken ArrayList (Arrays.asList (array)) wanneer we een Lijst uit een array.

Maar, in tegenstelling tot ons vorige voorbeeld, is dit een onafhankelijke kopie van de array, wat dat betekent het wijzigen van de nieuwe lijst heeft geen invloed op de oorspronkelijke array. Daarnaast hebben we alle mogelijkheden van een vaste klant ArrayList, zoals het toevoegen en verwijderen van elementen:

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

Laten we nu het eerste element van stringList:

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

En laten we nu eens kijken wat er is gebeurd met onze oorspronkelijke array:

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

Zoals we kunnen zien, onze oorspronkelijke reeks blijft onaangetast.

Voordat we afronden, als we de JDK-broncode bekijken, kunnen we het Arrays.asList methode retourneert een type ArrayList dat is anders dan java.util.ArrayList. Het belangrijkste verschil is dat de geretourneerde ArrayList verpakt alleen een bestaande array - het implementeert niet de toevoegen en verwijderen methoden.

4. Conclusie

In dit korte artikel hebben we de verschillen onder de loep genomen tussen twee manieren om een ​​array om te zetten in een ArrayList. We hebben gezien hoe die twee opties zich gedragen en het verschil tussen hoe ze hun interne arrays implementeren.

Zoals altijd zijn de codevoorbeelden te vinden op GitHub.