1. Hoe ArrayListis gestructureerd

ArrayListis de Java-klasse die het meest wordt gebruikt voor het opslaan van elementen. Dus hoe ArrayListwerkt het en waarom vindt iedereen het zo leuk?

De structuur van ArrayListis eenvoudig en ingenieus. Elk ArrayListobject bevat twee velden:

  • Een reeks elementen
  • Een sizevariabele die het aantal elementen in de lijst opslaat

Intern ArrayListbevat een object een heel gewone array! Maar dat is niet alles. Er is ook een groottevariabele , die de lengte van de lijst opslaat. Dit is hoe het werkt:

Aanvankelijk is de lengte van de array in de lijst 10. En de sizevariabele is 0.

Als u een element aan de lijst toevoegt, wordt het opgeslagen in de 0e cel van de array en sizewordt het verhoogd naar 1.

Als u nog een element toevoegt, wordt het opgeslagen in de 1e cel en sizewordt het opnieuw met 1 verhoogd en gelijk aan twee.

Als je een ander element toevoegt wanneer er geen ruimte meer is in de array, dan gebeurt het volgende in de add()methode:

  1. Er wordt een nieuwe array gemaakt die anderhalf keer zo lang is als de vorige
  2. Alle elementen van de oude array worden naar de nieuwe array gekopieerd.
  3. In het ArrayListobject vervangt een verwijzing naar de nieuwe array de verwijzing naar de oude .
  4. Het doorgegeven element wordt opgeslagen in de 10e cel van de nieuwe array.
  5. De groottevariabele neemt met 1 toe en is nu gelijk aan 11

Iets soortgelijks gebeurt bij het toevoegen (invoegen) van een element in het midden van de lijst. De bestaande elementen worden 1 naar rechts verschoven en het doorgegeven element wordt naar de nieuw vrijgekomen cel van de array geschreven.

Nu bekijken we de meest elementaire scenario's met lijsten:


2. Een element toevoegen aan eenArrayList

Laten we eens kijken wat er in de lijst gebeurt wanneer er elementen aan worden toegevoegd. Onmiddellijk nadat een ArrayList-object is gemaakt, hebben we zoiets in het geheugen:

Een element toevoegen aan een ArrayList

We hebben een ArrayListobject dat twee velden (twee variabelen) bevat: een container (de dataarray) en het aantal opgeslagen elementen ( size). De datavariabele slaat een verwijzing op naar een container (array) die 10 elementen kan opslaan.

Als we besluiten om het getal 5 aan de array toe te voegen, krijgen we het volgende beeld:

Een element toevoegen aan een ArrayList 2

De array slaat nu het element 5 en size == 1.

size()Als iemand nu de methode op ons object aanroept ArrayList, is de geretourneerde waarde het aantal elementen dat in de lijst is opgeslagen: 1. Het aantal elementen in de lijst is niet hetzelfde als de opslagcapaciteit van de array.

Noch de huidige opslagcapaciteit, noch de array zelf zal ooit toegankelijk (zichtbaar) zijn buiten het ArrayListobject. Dit zijn en blijven de ArrayListinterne gegevens van de 's'.

Laten we nog 7 getallen aan de lijst toevoegen: 10, 20, 30, 40, 50, 60, 70.

Het geheugen ziet er nu zo uit:

Een element toevoegen aan een ArrayList

Als u de size()methode nu aanroept, retourneert deze het getal 8, het nieuwe aantal elementen in de lijst. Deze waarde heeft niets te maken met de grootte van de interne array.

Belangrijk:

Er is één oversimplificatie in deze afbeelding.

De ArrayListklasse kan geen primitieve typen opslaan, dus gebruikt deze het Integertype in plaats van int. De container slaat niet direct de waarden {5, 10, 20, 30, 40, 50, 60, 70} op, maar verwijzingen naar Integerobjecten. Alle lege cellen in de containeropslag null.



3. De lengte van een lijst vergroten

Laten we eens kijken wat er in een lijst gebeurt als er geen lege cellen meer in de interne array zijn.

Stel dat we een lijst van 10 elementen hebben:

De lengte van een lijst vergroten

We besluiten er het getal 100 aan toe te voegen . Dit is wat er gebeurt in de add()methode:

Stap 1 — Maak een nieuwe array aan:

De lengte van een lijst vergroten 2

Stap 2 — Kopieer alle elementen van de oude array naar de nieuwe:

De lengte van een lijst vergroten 2

Stap 3 — Vervang de oude array (wijzig de verwijzing naar de ArrayListinterne array van het object):

De lengte van een lijst vergroten 3

Stap 4 — Voeg het nieuwe nummer toe, waar we zo hard voor hebben gewerkt:

De lengte van een lijst vergroten 4