"Hier ben ik."

"Hallo, Ellie!"

"Vandaag gaan we het hebben over een interessant onderwerp. Ik ga je iets vertellen over de klasse ArrayList ."

"Een nieuwe klas? Cool! Wat kan het?"

"Laat ik beginnen met het achtergrondverhaal. Het enige dat programmeurs niet leuk vinden aan arrays, is dat je hun grootte niet kunt veranderen. Wat doe je als je nog drie elementen moet toevoegen aan een array die maar één vrij slot heeft? "

"De enige oplossing voor dit probleem is om hele grote arrays te maken, om te garanderen dat je genoeg ruimte hebt voor alle elementen. Dit betekent echter vaak geheugenverspilling. Als een array meestal drie elementen bevat, maar er is zelfs de kleinste kans dat het misschien 100 elementen moet bevatten, moet je een array van 100 elementen maken."

"Dus, wat hebben programmeurs bedacht?"

"Ze hebben de ArrayList- klasse geschreven, die hetzelfde doet als een Array, maar de grootte ervan kan veranderen."

'Interessante zet. Hoe hebben ze dat gedaan?'

"Elk ArrayList- object slaat een regelmatige reeks elementen op. Wanneer u elementen uit een ArrayList leest , leest het ze uit de binnenste array. Wanneer u ze naar de ArrayList schrijft , schrijft het ze naar de binnenste array. Vergelijk hier deze kolommen:"

matrix ArrayLijst
Maak een container voor elementen
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Verkrijg het aantal elementen
int n = list.length;
int n = list.size();
Haal een element op uit een array/collectie
String s = list[3];
String s = list.get(3);
Schrijf een element in een array
list[3] = s;
list.set(3, s);

"Dus, waarom is de ArrayList beter? Voor zover ik weet, is de code nu langer."

"Ten eerste ondersteunt de ArrayList verschillende extra bewerkingen die programmeurs de hele tijd moeten uitvoeren. Een gewone array ondersteunt deze bewerkingen niet. Bijvoorbeeld het invoegen of verwijderen van elementen uit het midden van een array zonder gaten achter te laten. "

"Ten tweede, de mogelijkheid om de grootte van de array te wijzigen. Als je nog een element moet toevoegen maar de interne array geen vrije slots heeft, gebeurt het volgende in de ArrayList :

a) Er wordt een andere array gemaakt die 50% groter is dan de huidige binnenste array, plus één element.

b) Alle elementen uit de oude array worden naar de nieuwe gekopieerd.

c) De nieuwe array wordt opgeslagen als de binnenste array van het object ArrayList. De oude array wordt als afval verklaard (we stoppen gewoon met het opslaan van een verwijzing ernaar)."

matrix ArrayLijst
Voeg een element toe aan het einde van de array
Deze actie wordt niet ondersteund
list.add(s);
Voeg een element toe in het midden van de array
Deze actie wordt niet ondersteund
list.add(15, s);
Voeg een element toe aan het begin van de array
Deze actie wordt niet ondersteund
list.add(0, s);
Verwijder een element uit de array
We kunnen een element verwijderen met list[3] = null. Maar dit zou een 'gat' in de array achterlaten.
list.remove(3);

"Hoe werken we met deze ArrayList?"

"Eigenlijk net zoals we dat doen met een gewone array. Kijk. Laten we het werken met een ArrayList vergelijken met het werken met een array. Stel dat we 'in 10 strings moeten inlezen en ze in omgekeerde volgorde op het scherm moeten weergeven '."

"Kijk hiernaar:

Met een array
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
Met een ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList&ltString> list = new ArrayList&ltString>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

// Display the contents of the collection
for (int i = 0; i < list.size(); i++)
{
  int j = list.size() - i - 1;
  System.out.println( list.get(j) );
}
}

Ik heb dezelfde kleur gebruikt om soortgelijke acties in elke kolom te markeren."

"Aan de ene kant is alles anders. Aan de andere kant is het nog steeds hetzelfde."

"Klopt. Behalve dat we geen vierkante haken gebruiken bij het werken met een ArrayList . In plaats daarvan gebruiken we get , set en add methoden."

"Ja, zoveel heb ik verzameld. Toch lijkt het erg op elkaar."