Een element toevoegen aan een Java-array versus een ArrayList

1. Overzicht

In deze tutorial kijken we kort naar de overeenkomsten en verschillen in geheugentoewijzing tussen Java-arrays en de standaard ArrayList. Verder zullen we zien hoe u elementen toevoegt aan en invoegt in een array en ArrayList.

2. Java-arrays en ArrayList

Een Java-array is een basisgegevensstructuur die door de taal wordt geleverd. In tegenstelling tot, ArrayList is een implementatie van de Lijst interface ondersteund door een array en wordt geleverd in het Java Collections Framework.

2.1. Elementen openen en wijzigen

We kunnen array-elementen openen en wijzigen met behulp van de notatie met vierkante haken:

System.out.println (anArray [1]); anArray [1] = 4;

Aan de andere kant, ArrayList heeft een reeks methoden om toegang te krijgen tot elementen en deze te wijzigen:

int n = anArrayList.get (1); anArrayList.set (1, 4);

2.2. Vaste versus dynamische grootte

Een array en de ArrayList beide wijzen heap-geheugen op een vergelijkbare manier toe, maar wat verschilt is dat een array heeft een vaste grootte, terwijl de grootte van een ArrayList neemt dynamisch toe.

Omdat een Java-array een vaste grootte heeft, moeten we de grootte opgeven tijdens het instantiëren ervan. Het is niet mogelijk om de grootte van de array te vergroten nadat deze is geïnstantieerd. In plaats daarvan moeten we een nieuwe array maken met de aangepaste grootte en alle elementen uit de vorige array kopiëren.

ArrayList is een aanpasbare array-implementatie van de Lijst interface - dat wil zeggen, ArrayList groeit dynamisch naarmate er elementen aan worden toegevoegd. Wanneer het aantal huidige elementen (inclusief het nieuwe element dat moet worden toegevoegd aan het ArrayList) groter is dan de maximale grootte van de onderliggende array, dan is de ArrayList vergroot de grootte van de onderliggende array.

De groeistrategie voor de onderliggende array hangt af van de implementatie van het ArrayList. Omdat de grootte van de onderliggende array echter niet dynamisch kan worden vergroot, wordt een nieuwe array gemaakt en worden de oude array-elementen naar de nieuwe array gekopieerd.

De add-operatie heeft een constante afgeschreven tijdskost. Met andere woorden, toevoegen n elementen naar een ArrayList vereist Aan) tijd.

2.3. Elementtypes

Een array kan zowel primitieve als niet-primitieve gegevenstypen bevatten, afhankelijk van de definitie van de array. Echter, een ArrayList kan alleen niet-primitieve gegevenstypen bevatten.

Wanneer we elementen met primitieve gegevenstypen invoegen in een ArrayListconverteert de Java-compiler automatisch het primitieve gegevenstype naar de bijbehorende object wrapper-klasse.

Laten we nu kijken hoe u elementen toevoegt en invoegt in Java-arrays en het ArrayList.

3. Een element toevoegen

Zoals we al hebben gezien, arrays hebben een vaste grootte.

Om een ‚Äč‚Äčelement toe te voegen, moeten we dus eerst een nieuwe array declareren die groter is dan de oude array en de elementen van de oude array naar de nieuw gemaakte array kopiëren. Daarna kunnen we het nieuwe element aan deze nieuw gemaakte array toevoegen.

Laten we de implementatie ervan in Java bekijken zonder gebruik te maken van hulpprogramma-klassen:

openbaar geheel getal [] addElementUsingPureJava (geheel getal [] srcArray, int elementToAdd) {geheel getal [] destArray = nieuw geheel getal [srcArray.length + 1]; voor (int i = 0; i <srcArray.length; i ++) {destArray [i] = srcArray [i]; } destArray [destArray.length - 1] = elementToAdd; retourneer destArray; }

Als alternatief kan het Arrays class biedt een hulpprogramma-methode kopie van(), wat helpt bij het maken van een nieuwe array van grotere afmetingen en het kopiëren van alle elementen uit de oude array:

int [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1);

Nadat we een nieuwe array hebben gemaakt, kunnen we het nieuwe element eenvoudig aan de array toevoegen:

destArray [destArray.length - 1] = elementToAdd;

Aan de andere kant, een element toevoegen in ArrayList is vrij eenvoudig:

anArrayList.add (newElement);

4. Een element invoegen bij Index

Het invoegen van een element bij een bepaalde index zonder de eerder toegevoegde elementen te verliezen, is geen eenvoudige taak in arrays.

Allereerst, als de array al het aantal elementen bevat dat gelijk is aan de grootte, dan moeten we eerst een nieuwe array met een grotere afmeting maken en de elementen naar de nieuwe array kopiëren.

Verder moeten we alle elementen die na de opgegeven index komen één positie naar rechts verschuiven:

openbare statische int [] insertAnElementAtAGivenIndex (laatste int [] srcArray, int index, int newElement) {int [] destArray = nieuwe int [srcArray.length + 1]; int j = 0; for (int i = 0; i <destArray.length-1; i ++) {if (i == index) {destArray [i] = newElement; } anders {destArray [i] = srcArray [j]; j ++; }} return destArray; }

echter, de ArrayUtils class geeft ons een eenvoudigere oplossing om items in een array in te voegen:

int [] destArray = ArrayUtils.insert (2, srcArray, 77);

We moeten de index specificeren waarop we de waarde willen invoegen, de bronarray en de waarde die moet worden ingevoegd.

De invoegen () method retourneert een nieuwe array met een groter aantal elementen, met het nieuwe element op de gespecificeerde index en alle overige elementen één positie naar rechts verschoven.

Merk op dat het laatste argument van de invoegen () methode is een variabel argument, dus we kunnen een willekeurig aantal items in een array invoegen.

Laten we het gebruiken om drie elementen in te voegen srcArray beginnend bij index twee:

int [] destArray = ArrayUtils.insert (2, srcArray, 77, 88, 99);

En de overige elementen worden drie plaatsen naar rechts verschoven.

Bovendien kan dit triviaal worden bereikt voor de ArrayList:

anArrayList.add (index, newElement);

ArrayList verschuift de elementen en plaatst het element op de gewenste locatie.

5. Conclusie

In dit artikel hebben we gekeken naar Java-array en ArrayList. Verder hebben we gekeken naar de overeenkomsten en verschillen tussen de twee. Ten slotte hebben we gezien hoe we elementen in een array kunnen toevoegen en invoegen en ArrayList.

Zoals altijd is de volledige broncode van de werkende voorbeelden beschikbaar op GitHub.